JavaScript中的數組操作

在之前的一篇博客中提到了一些 JavaScript Array 對象的方法,比如 slice()splice()pop()push() 等,博客鏈接:

http://xitongjiagoushi.blog.51cto.com/9975742/1653063

JavaScript Array還有一些常用的操作或者說技巧,比如清空數組,克隆數組等,下面來看一下。

1. 指定位置插入元素:

使用 Array.prototype.splice()不僅可以刪除數組中的元素,也可以在指定位置添加元素:

var ary = [1, 2, 3, 4, 5];
ary.splice(5, 0,6);
console.log(ary); //[1, 2, 3, 4, 5, 6]

如果不介意擴展 Array.prototype,可以爲其添加如下方法:

Array.prototype.insert = function(index, items) {
  if(items instanceof Array) {
    var currentIndex = index;
    for(var i = 0; i < items.length; i++) {
      this.splice(currentIndex, 0, items[i]);
      currentIndex++;
    }
  } else {
    this.splice(index, 0, items);
  }
};
ary.insert(6, 7);
console.log(ary); //[1, 2, 3, 4, 5, 6, 7]
ary.insert(7, [8,9]);
console.log(ary); //[1, 2, 3, 4, 5, 6, 7, 8, 9]


2. 清空數組:

通常我們會這樣清空數組:

ary = [];
console.log(ary); //[]

但是這並不是最優的方式,因爲這會創建一個對新的空數組的引用:

var ary = [1, 2, 3, 4, 5],
   newAry = ary;
//ary指向一個新的空數組
ary = []; //並不影響原數組([1, 2, 3, 4, 5])
console.log(newAry); //[1, 2, 3, 4, 5]
var ary = [1, 2, 3, 4, 5],
  newAry = ary;
//ary還是對原數組([1, 2, 3, 4, 5])的引用
ary.length = 0; //原數組被清空
console.log(newAry); //[]

通過上面的解釋不難看出,最優的方式是將數組的 length 屬性賦值爲 0

var ary = [1, 2,3, 4, 5];
ary.lengh = 0;
console.log(ary); //[]

注:

對 String.prototype.length 賦值並不能影響 String 的長度,這一點要和對 Array.prototype.length 賦值區分開來。


3. 數組元素排序:

Array.prototype.sort()用來排序數組,不傳參時按默認規則排序,如:

[1, 3, 9,2].sort(); //[1, 2, 3, 9]
[1, “a”, function(){}, 12, “c”].sort(); //[1, 12, {}, “a”, “c”, [Function]]

如果想要定製自己的排序規則,需要傳入一個有返回值的排序函數,比如想要對下面的對象數組按元素的 age 屬性順序排序:

var objAry =
[
  {name: “Lucy”, age: 28, sex: “female”},
  {name: “Tom”, age: 26, sex: “male”},
  {name: “Jordan”, age: 30, sex: “male”}
];
objAry.sort(function(obj1, obj2) {
  return obj1.age - obj2.age;
});
//排序結果
//[
//  {name: “Tom”, age: 26, sex: “male”},
//  {name: “Lucy”, age: 28, sex: “female”},
//  {name: “Jordan”, age: 30, sex: “male”}
//]


4. 克隆數組:

克隆數組?簡單,for循環走起:

var ary = [1, 2, 3, 4, 5],
  newAry = [];
for(var i = 0; i< arr.length; i++) {
  newAry.push(ary[i]);
}
console.log(newAry); //[1, 2, 3, 4, 5]

完成任務,但是每次這麼克隆敲鍵盤可是夠受的了,用點高端簡潔的方法:

var newAry = ary.slice(); //第一種方法
var newAry = ary.concat(); //第二種方法

簡潔有效的完成任務,媽媽再也不用擔心我的鍵盤會敲壞了。


完。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章