js中数组的一些常见操作 - 1

170 阅读3分钟

对数组进行操作在js中是很常见的,今天就整理一下这些方法

  • 对数组进行去重
// 例子
var dataList = [
    {
        name: 'aa',
        age: 25
    },{
        name: 'bb',
        age: 24
    },{
        name: 'cc',
        age: 24
    },{
        name: 'dd',
        age: 22
    },{
        name: 'aa',
        age: 25
    }
]
对上面的数组进行去重,下面这个方法,是最快的。
var hash = {};
var filterList = dataList.reduce(function (item, next) {
    hash[next.name] ? "" : (hash[next.name] = true && item.push(next));
    return item;
}, [])

console.log(filterList);
filterList = [
    { 
        name: 'aa',
        age: 25 
    },
    {   
        name: 'bb',
        age: 24
    },
    { 
        name: 'cc',
        age: 24
    },
    { 
        name: 'dd',
        age: 22 
    } 
]
  • 合并数组

    开发中经常会碰到合并数组的问题,也有多种方法。

    var arr1 = [1, 2, 3];

    var arr2 = [4, 5, 6];

    1、Array对象有一个 concat() 方法。

    var arr3 = arr1.concat(arr2); // arr3 = [1, 2, 3, 4, 5, 6];

    这样有个问题,合并之后,arr1 与 arr2 的数据并没有改变。重新生成了一个新的数组,这样会造成内存浪费。

    2、使用循环,把一个数组的每一项添加到另一个数组中。

      arr1.forEach(function (item, index){
          arr2.push(item);
      })
    

    这个方法就很不错了,就是代码有点多。还能不能更短一点。

    3、使用 apply 方法

      arr1.push.apply(arr1, arr2); // arr1 = [1, 2, 3, 4, 5, 6];
    

需要注意两个小问题

  • 1、以上3种方法,都没有考虑过谁的长度更小。

    最好的做法是先判断谁的长度小,然后用 大数组合并小数组,这样可以减少数组操作次数。

  • 2、如果不想改变原数组,这个时候就只能用 concat() 方法。

数组的一些原生操作方法

  • 末尾添加与删除

    arr.push() // 末尾添加 返回添加后的数组长度

    arr.pop() // 末尾删除 返回删除的项

  • 开头添加与删除

    arr.unshift() //开头添加 返回添加后的数组长度

    arr.shift() // 开头删除 返回删除的项

  • slice() 与 splice()

      var arr = [1, 2, 3, 4, 5, 6, 7];
    

    array.slice() 方法一般用来截取数组

      slice(begin, end); // 返回从 begin 开始 到 end (不包括 end) 位置的项。
      var s = arr.slice(2); 
      console.log(arr) // arr = [1, 2, 3, 4, 5, 6, 7]; 原数组不变
      console.log(s)  // s = [3, 4, 5, 6, 7]; 只有一个参数的时候,返回参数索引至末尾的所有项。
      
      var s1 = arr.slice(1, 4);
      console.log(arr); // arr = [1, 2, 3, 4, 5, 6, 7]; 原数组不变
      console.log(s1);  // s1 = [2, 3, 4]; 返回索引1 到 4 (不包括4) 的数据。
    

    array.splice() 方法,可以用来插入、替换、删除数据。

      array.splice(start, delNum, items);
    

    start: 从数组的哪一位开始修改内容,如果超出了数组的长度,则从数组末尾开始添加内容。如果是负值,则从数组的末尾开始计数。

    delNum:表示要移除的个数,如果值为 0 则表示不移除数据。

    items:打算添加进数组的数据,如果没有,则splice()只删除数据。

      var d = arr.splice(2);
      console.log(arr); // arr = [1, 2]; 只有一个参数的时候,会把原数组从参数索引至末尾的数据都截取掉。会改变原数组。
      console.log(d); // d = [3, 4, 5, 6, 7]; 返回截取的数据。
    
    
    
      var d1 = arr.splice(2, 4);
      console.log(arr); // arr = [1, 2, 7]; 把原数组从索引2 开始,删除 4 项数据。删除数据
      console.log(d1); // d1 = [3, 4, 5, 6];  返回删除的元素
      
      var d2 = arr.splice(2, 0, 12, 13, 14);
      console.log(arr); // arr = [1, 2, 12, 13, 14, 3, 4, 5, 6, 7]; 在原数组索引为2的位置,删除 0 个数据,添加后面的数据。 插入数据
      console.log(d2); // []  返回一个空数组。
      
      var d3 = arr.splice(2, 2, 1314);
      console.log(arr); // arr = [1, 2, 1314, 5, 6, 7] 在原数组从索引为 2 的位置,删除 2 项数据,然后添加 1314 数据到删除的位置。替换数据