数组
优质
小牛编辑
183浏览
2023-12-01
复制
数组的复制可以通过 [].slice()
或 [].concat()
来实现。
去重
这里所提供的示例只考虑数组元素是原始类型,其他情况需要根据场景改造代码。
无兼容问题方式
双重遍历这种方式是兼容性最好的,可以完全无视代码运行环境,但性能可能是最差的。
function unique( arr ) { var result = []; var i, m, j, n; for ( i = 0, m = arr.length; i < m; i++ ) { for ( j = 0, n = result.length; j < n; j++ ) { if ( result[j] === arr[i] ) { break; } } if ( j === n ) { result.push(arr[i]); } } return result;}
用一个对象来记录已经存在的数组元素性能会好一丢丢……
function unique( arr ) { var result = []; var record = {}; var k, v; for ( var i = 0, m = arr.length; i < m; i++ ) { v = arr[i]; k = typeof v + v; if ( record.hasOwnProperty(k) ) { continue; } record[k] = true; result.push(v); } return result;}
ES5 方式
function unique( arr ) { return arr.filter(function( el, i, src ) { return src.indexOf(el) === i; });}
ES6 方式
有一种叫「集合」的数据结构的特点就是没有重复值,并且 ES6 中提供了 Set()
构造函数创建这种数据结构,因此能够用它来进行数组去重。
由于 Set()
的实例对象是个可迭代对象,可以用同样是 ES6 新增的将一个类数组或可迭代对象转化为数组的方法 Array.from()
来转换。
function unique( arr ) { return Array.from(new Set(arr));}
用赋值与扩展运算符的方式可以更加简化:
const unique = arr => [...new Set(arr)];