在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]
答案 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)
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)