如何使用reduce()合并数组并删除重复的项目

时间:2019-05-30 16:51:46

标签: javascript ecmascript-6 reduce

在JavaScript中使用reduce函数时遇到问题。我的目标是获取一个数组数组,并使用reduce,然后合并所有值并删除重复项:

我有一个像这样的数组: firstArray = [[1,2],[2,3,4],[4,5,6]]

在应用reduce()之后,我需要一个这样的数组: resultArray = [1、2、3、4、5、6]

const arrayElements = [[1,2],[2,3,4],[5,6]];
const newArray = arrayElements.reduce((total, value) => {
    return total.concat(value);
}, []);

这是我所拥有的片段,它仅连接所有值,即[1、2、2、3、4、5、6]

5 个答案:

答案 0 :(得分:1)

var num = [[1,2],[2,3,4],[5,6]];
var unique_numbers = [].concat(...num);
unique_numbers = Array.from(new Set(unique_numbers ));

答案 1 :(得分:0)

您可以使用Setflat

const array = [[1,2],[2,3,4],[5,6]];
const newArray = [...new Set(array.flat(Infinity))]

console.log(newArray)

答案 2 :(得分:0)

您的reduce是正确的,只需将数据添加到集合中,然后使用扩展语法...

将集合转换为数组

const arrayElements = [[1,2],[2,3,4],[5,6]];
const newArray = [...new Set(arrayElements.reduce((total, value) => total.concat(value), []))];

console.log(newArray)

答案 3 :(得分:0)

您可以使用Set进行此操作:

const newArray = arrayElements.reduce((accum, arr) => [...accum, ..arr], [])
const arrNoDupes = [...new Set(newArray)]

或使用filter

const newArray = arrayElements.reduce((accum, arr) => [
  ...accum
  ...arr.filter(value => !accum.includes(value))
], [])

这只是您可以实现自己想要实现的两种方式。

答案 4 :(得分:0)

如果担心浏览器支持,这是老式的ES5方法。

var arrayElements = [[1,2],[2,3,4],[5,6]];
var newArray = arrayElements.reduce(function(total, value){
  return total.concat(value).filter(function (x, i, a) { 
    return a.indexOf(x) == i; 
  });
}, []);
console.log(newArray)