gpt4 book ai didi

javascript - 使用 javascript array.reduce 删除重复项

转载 作者:数据小太阳 更新时间:2023-10-29 06:01:18 24 4
gpt4 key购买 nike

我是 javascript 的新手,我自己从网络教程中学习它时遇到了一些挑战。请帮助我解决以下问题。

问题:

编写一个函数,它接受两个或多个数组,并按照原始提供的数组的顺序返回一个新的唯一值数组。

换句话说,所有数组中出现的所有值都应按其原始顺序包含,但最终数组中没有重复项。

唯一数字应按其原始顺序排序,但最终数组不应按数字顺序排序。

只使用 Array.reduce 来解决这个问题!您的解决方案应如下所示:

function unite(arr1, arr2, arr3) {
return arr1;
}

unite([1, 2, 3], [5, 2, 1, 4], [2, 1]);

我无法理解如何在这里使用 reduce。与此相比,所有互联网示例都非常简单。 https://www.airpair.com/javascript/javascript-array-reduce http://adripofjavascript.com/blog/drips/boiling-down-arrays-with-array-reduce.html

我的错误解决方案:

function arrayDiff(resultArray, element){
var idx = anotherArray.indexOf(element);
if(idx != -1){
resultArray.push(element);
return resultArray;
}
}

function unite(arr1, arr2, arr3) {
var arr = [];
var r1 = arr1.reduce(arrayDiff);
var r2 = arr2.reduce(arrayDiff);
var r3 = arr3.reduce(arrayDiff);
arr.concat(r1).concat(r2).concat(r3);
return arr;
}


r = unite([1, 2, 3], [5, 2, 1, 4], [2, 1]);
console.log(r);

错误:ReferenceError:未定义另一个数组

最佳答案

要处理多个数组参数,可以使用arguments .因此,您的函数可以采用 N 参数,它更通用。

然后,您可以平整所有数组参数,并开始减少您的数据。当您减少我们的数组时,您将通过排除冗余数据来创建一个新数组。因此,您将从一个 数组开始,然后通过 reduce 过程填充它。

  function unite(){
//Flat array arguments, then process to reduce data
return [].concat.apply([], arguments).reduce(function(result, current){
//If my result array doesn't get current element
return result.indexOf(current) === -1
//concat current element to result and return it
? result.concat(current)
//Otherwise, just return actual result array
: result;
}, []);
}

var array = unite([1,2], [1,6,2,3], [4,5]);

console.log(array);
//[1,2,6,3,4,5]

编辑 06/02/2017:

现在,您可以使用 spread operator为了处理多个参数,例如通过解构赋值。此外,我们可以通过将 indexOf() 操作与按位运算符 ~ 结合使用来提高性能。

function unite(...data) {
return [].concat.apply([], data).reduce((result, current) => {
return ~result.indexOf(current)
? result
: result.concat(current)
}, []);
}

console.log(unite([1,2,3], [1, 4, 4, 5, 6]));

关于javascript - 使用 javascript array.reduce 删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31929074/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com