1. 程式人生 > >Array常用方法總結

Array常用方法總結

一、【常用語法】

1.1、陣列的建立
var arrayObj = new Array(); //建立一個數組

var arrayObj = new Array([size]); //建立一個數組並指定長度,注意不是上限,是長度

var arrayObj = new Array([element0[, element1[, ...[, elementN]]]]); //建立一個數組並賦值

要說明的是,雖然第二種方法建立陣列指定了長度,但實際上所有情況下陣列都是變長的,也就是說即使指定了長度為5,仍然可以將元素儲存在規定長度以外的,注意:這時長度會隨之改變。

1.2、陣列的元素的訪問

var testGetArrValue=arrayObj[1]; //獲取陣列的元素值

arrayObj[1]= "這是新值"; //給陣列元素賦予新的值

1.3、陣列元素的新增

arrayObj. push([item1 [item2 [. . . [itemN ]]]]);// 將一個或多個新元素新增到陣列【結尾】,並返回陣列新長度

arrayObj.unshift([item1 [item2 [. . . [itemN ]]]]);// 將一個或多個新元素新增到陣列【頭部】,陣列中的元素自動後移,返回陣列新長度

arrayObj.splice(insertPos,0,[item1[, item2[, . . . [,itemN]]]]);//將一個或多個新元素【插入】到陣列的【指定位置】,插入位置的元素自動後移,返回""。

1.4、陣列元素的刪除

arrayObj.pop(); //移除【結尾】一個元素並返回該元素值

arrayObj.shift(); //移除【頭部】一個元素並返回該元素值,陣列中元素自動前移

arrayObj.splice(deletePos,deleteCount); //刪除從【指定位置】deletePos開始的【指定數量】deleteCount的元素,陣列形式返回所移除的元素


1.5、陣列的擷取和合並

arrayObj.slice(start, [end]); //以陣列的形式【返回陣列的一部分[start,end)】,注意不包括 end 對應的元素,如果省略 end 將複製 start 之後的所有元素

arrayObj.concat([item1[, item2[, . . . [,itemN]]]]); //將多個數組(也可以是字串,或者是陣列和字串的混合)【連線】為一個數組,返回連線好的新的陣列

1.6、陣列的拷貝

arrayObj.slice(0); //返回陣列的拷貝陣列[0,...],注意是一個新的陣列,不是指向

arrayObj.concat(); //返回陣列的拷貝陣列【連線為空】,注意是一個新的陣列,不是指向

1.7、陣列元素的排序

arrayObj.reverse(); //【顛倒】元素順序(最前的排到最後、最後的排到最前),返回陣列地址

arrayObj.sort(); //對陣列元素排序,返回陣列地址

1.8、陣列元素的字串化

const separator = '/';

arrayObj.join(separator); //返回字串,這個字串將陣列的每一個元素值連線在一起,中間用 separator 隔開。

//提醒:toLocaleString 、toString 、valueOf:可以看作是join的特殊用法,不常用

二、【陣列物件的3個屬性的理解】

2.1、length 屬性
Length屬性表示陣列的長度,即其中元素的個數。因為陣列的索引總是由0開始,所以一個數組的上下限分別是:0和length-1。
和其他大多數語言不同的是,JavaScript陣列的length屬性是可變的,這一點需要特別注意。
當length屬性被設定得更大時,整個陣列的狀態事實上不會發生變化,僅僅是length屬性變大;
當length屬性被設定得比原來小時,則原先陣列中索引大於或等於length的元素的值全部被丟失。如:

var arr=[12,23,5,3,25,98,76,54,56,76];

alert(arr.length);//10

arr[15]=34;

alert(arr.length);//16,其中arr=[12,23,5,3,25,98,76,54,56,76,,,,,,34]

2.2、prototype 屬性

返回物件型別原型的引用。prototype 屬性是 object 共有的。

objectName.prototype

objectName 引數是object物件的名稱。

//說明:用 prototype 屬性提供物件的類的一組基本功能。 物件的新例項【“繼承”賦予該物件原型的操作(方法)】。

對於陣列物件,以以下例子說明prototype 屬性的用途。

給陣列物件新增返回陣列中最大元素值的方法。要完成這一點,宣告一個函式,將它加入 Array.prototype, 並使用它。如:

function array_max(){
  var i,
  max = this[0];
  for (i = 1; i < this.length; i++){
    if (max < this[i])
    max = this[i];
  }
  return max;
}

Array.prototype.max = array_max;//陣列prototype‘繼承’該方法!!!

var x = new Array(1, 2, 3, 4, 5, 6);

var y = x.max();


2.3、constructor 屬性

表示建立物件的函式。
object.constructor //object是物件或函式的名稱。
//說明:constructor 屬性是所有具有 prototype 的物件的成員。它們包括除 Global 和 Math 物件以外的所有 JScript 固有物件。constructor 屬性儲存了對【構造特定物件例項的函式的引用】。

例如:
x = new String("Hi");
if (x.constructor == String) // 進行處理(條件為true)。



function MyFunc {
  // 鉤子函式
}

三、【實際操作】

3.1.替換陣列中的部分元素
for (let i = 0; i < tableData.length; i++) {
  tableData[i].begin_time = momenttableData[i].begin_time, 'YYYYMMDDHHmmss').format('YYYY-MM-DD HH:mm:ss');
  tableData[i].end_time = moment(tableData[i].end_time, 'YYYYMMDDHHmmss').format('YYYY-MM-DD HH:mm:ss');
}

3.2.合併相同的元素
mergeArrykey(result,key) {
  let map = {},
  dest = [];
  for (let i = 0; i < result.length; i++) {
    let ai = result[i];
    if (!map[ai.key]) {
      dest.push({
        key: ai.key,//過濾引數key
        id: ai.id,
        data: [ai]
      });
      map[ai.key] = ai;
    } else {
      for (let j = 0; j < dest.length; j++) {
        let dj = dest[j];
        if (dj.key == ai.key) {
          dj.data.push(ai);
          break;
        }
      }
    }
  }
  return dest
}

3.求多維陣列極值
//對維陣列--單一陣列:arr.join(",").split(",");//陣列元素都成了字串!!!
Math.max.apply(Math, arr.join(",").split(",")) //最大值
Math.min.apply(Math, arr.join(",").split(",")) //最小值

4.矩陣轉換:key value互換
const arr = [];//需要處理的資料
const arr_new = [];
for (let i = 0; i < arr[0].length; i++) {
  arr_new[i] = [];//1.設定length
}
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr[i].length; j++) {
  arr_new[j][i] = arr[i][j];//2.1.key value互換:讀取arr
  }
}
for (let i = 0; i < arr_new.length; i++) {
  for (let j = 0; j < arr_new[i].length; j++) {
  arr_new[i][j];//2.2.key value互換:替換到新陣列arr_new
  }
}

5.陣列重構:
const arr_new = [];//需要處理的資料
const seriesOptions = [];//重構後的陣列
arr_new.map((item, index) => {
  let obj = {};
  obj.value = item.id;//後臺接受的值
  obj.lable = item.name;//顯示的值
  seriesOptions.push(obj);
});
this.seriesOptions = seriesOptions;

6.計算陣列中相同元素的個數:元素名稱+數量
//1.只需要獲取數量,輸出newArr=[1,2,3,4,...]
checkArrayKey(arr) {
  let newArr = [];
  for (let i = 0; i < arr.length;) {
    let count = 0;
    for (let j = i; j < arr.length; j++) {
      if (arr[i] === arr[j]) {
        count++;
      }
    }
    newArr.push(count);
    i+=count;
  }
  return newArr
}
//2.得到一個新的陣列:元素名稱+數量+合併後的分類
checkArray(arr) {
  var newArr = [];
  for (var i = 0; i < arr.length;) {
    var count = 0;
    for (var j = i; j < arr.length; j++) {
      if (arr[i] === arr[j]) {
        count++;
      }
    }
    newArr.push({
      date: arr[i],
      count: count
    })
    i+=count;
  }
  for (var k = 0; k < arr.length; k++) {
    return newArr[k]
  }
}

其他常用轉換:

//.1.字串轉陣列:str.split(',');

var str = '1,2,3,4,巴德,merge';
var arr = str.split(',');
console.log(arr); // ["1", "2", "3", "4", "巴德", "merge"] 陣列
console.log(arr[4]); // 巴德

//2.陣列轉字串:arr.join(',');

var arr = [1,2,3,4,'巴德','merge'];
var str = arr.join(',');
console.log(str); // 1,2,3,4,巴德,merge

//3.字串物件--物件字串

var str = '1,2,3,4,巴德,merge';
var arr = str.split(',');//["1", "2", "3", "4", "巴德", "merge"]

var strify = JSON.stringify(arr);//json字串陣列:’["1", "2", "3", "4", "巴德", "merge"]‘
var arrParse = JSON.parse(strify);//json陣列:["1", "2", "3", "4", "巴德", "merge"]

【json字串物件】:var str='{ "name": "John" }';
var obj = str.toJSONString() 或 JSON.parse(str);(前端渲染)

【json物件字串】:var json = {name: "zhangsan", age: 23, email: "[email protected]"};
var jsonStr = JSON.stringify(json);(後臺接收)