javascript数组去重的方法
2019-04-04 本文已影响0人
原来是禽兽
1、最简单的方法
- 描述
使用 indexOf 判断数组中是否包含某个值 - 使用
var arr = [1,13,24,11,11,14,1,2];
var newArr= [];
for( var i=0; i<arr.length; i++ ) {
if( newArr.indexOf(arr[i]) === -1 ) {
newArr.push(arr[i]);
}
}
// newArr: [1, 13, 24, 11, 14, 2]
2、第一种方法的变种(使用对象属性)
- 描述
可能由于 indexOf 在IE9以下不支持 所以才会使用,思路是一模一样的
var arr = [1,13,24,11,11,14,1,2];
var obj = {};
var newArr = [];
for( var i=0; i<arr.length; i++ ) {
if( !obj[arr[i]] ) {
obj[arr[i]] = true;
newArr.push(arr[i]);
}
}
// newArr: [1, 13, 24, 11, 14, 2]
3、又一个变种方法(使用sort方法)
- 描述
通过sort默认排序后,循环比较最后一位是否相等,该方法会改变原有数组 - 使用
var arr = [1,13,24,11,11,14,1,2,1];
arr.sort();
var newArr = [];
for( var i=0; i<arr.length; i++ ) {
if( newArr[newArr.length-1] !== arr[i] ) {
newArr.push(arr[i]);
}
}
// newArr: [1, 13, 24, 11, 14, 2]
4、使用嵌套循环
- 描述
通过数组嵌套循环 + splice方法。该方法会改变原数组 - 使用
var arr = [1,13,24,11,11,14,1,2,1];
for( var i=0, len = arr.length; i<len; i++ ) {
for( var j=i+1; j<len; j++ ) {
if( arr[i] === arr[j] ) {
arr.splice(j, 1);
}
}
}
// newArr: [1, 13, 24, 11, 14, 2]
5、使用Set对象:
- 描述:
Set对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。 - 使用
var arr = [1,13,24,11,11,14,1,2];
var newArr = Array.from(new Set(arr));
// newArr: [1, 13, 24, 11, 14, 2]
后续有有意义的继续更新