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(); //第二种方法

简洁有效的完成任务,妈妈再也不用担心我的键盘会敲坏了。


完。


本文出自 “细桶假狗屎” 博客,请务必保留此出处http://xitongjiagoushi.blog.51cto.com/9975742/1675256

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值