js数组去重的几种方法。
使用flag
如果数组元素都是自然数,可以利用数组key都为自然数的特性,value记录对应的key是否已经存在于数组中。
1 2 3 4 5 6 7 8 9 10 11 12
| var source = [1, 2, 3, 2, 4, 6, 3]; var flags = [];
for (let i = 0; i < source.length; i++) { if (flags[source[i]]) { source.splice(i, 1); } else { flags[source[i]] = true; }
}
|
利用indexOf()构造只有唯一值数组
1 2 3 4 5 6 7 8
| var source = [1, 2, 3, 2, 4, 6, 3]; var target = [];
for (let i = 0; i < source.length; i++) { if (target.indexOf(source[i]) === -1) { target.push(source[i]); } }
|
filter()配合indexOf()
1 2 3 4 5 6 7 8
| var source = [1, 2, 3, 2, 4, 6, 3]; var target = [];
target = source.filter( (value, index) => { return source.indexOf(value) == index; } );
|
Set()和扩展运算符
Set
是es6新提供的数据类型,它是没有重复值的类数组。
Set
转化为数组需要通过 [...new Set(arr)]
。
1 2
| var source = [1, 2, 3, 2, 4, 6, 3]; const target = [...new Set(source)];
|