英特网校

javascript一行代码实现数组去重

方法一:

ES6中新增了Set数据结构,类似于数组,但是 它的成员都是唯一的 ,其构造函数可以接受一个数组作为参数,如:

let array = [1, 1, 1, 1, 2, 3, 4, 4, 5, 3];
let set = new Set(array);
console.log(set);
 // => Set {1, 2, 3, 4, 5}返回结果为对象格式

ES6中Array新增了一个静态方法Array.from,可以把类似数组的对象转换为数组,如通过querySelectAll方法得到HTML DOM Node List,以及ES6中新增的SetMap等可遍历对象,如:

let set = new Set();
set.add(1).add(2).add(3);
let array = Array.from(set);
console.log(array);
// => [1, 2, 3]  返回格式为数组

于是,现在我们可以用一行代码实现数组去重了:先用set去除重复生成一个对象,然后将对象转为数组

let array = Array.from(new Set([1, 1, 1, 2, 3, 2, 4]));
console.log(array);
// => [1, 2, 3, 4]

方法二:

扩展运算符( spread )是三个点(...)。它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列。

function dedupe(array){    
    return [...new Set(array)];
}
console.log(dedupe([4,6,0,1,1,2,4,0,3]));//[4, 6, 0, 1, 2, 3]

附:ES5实现数组去重

利用foreach或者for循环实现
var array = [1, '1', 1, 2, 3, 2, 4];
var tmpObj = {};
var result = [];
array.forEach(function(a) {
  var key = (typeof a) + a;
  if (!tmpObj[key]) {
    tmpObj[key] = true;
    result.push(a);
  }
});
console.log(result);
// => [1, "1", 2, 3, 4]


评论中心

登录后可评论,请 登录 注册