对数组进行操作在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 数据到删除的位置。替换数据