gpt4 book ai didi

javascript - 使用 Reduce 比较多个数组

转载 作者:行者123 更新时间:2023-11-29 16:45:40 27 4
gpt4 key购买 nike

我对 Javascript 很陌生,在大约一个月的时间里我已经尝试了大约 4 次这个问题,但我仍然无法解决它。

那么问题来了:构造一个函数交集,比较输入数组并返回一个包含在所有输入中找到的元素的新数组。奖励:使用 reduce!

格式为:

function intersection(arrays) {
// Your Code Goes Here
}

测试用例:应该记录 [15, 5]

console.log('Extensions 3 Test: ' + intersection([5, 10, 15, 20], [15, 88, 1, 5, 7]/*, [1, 10, 15, 5, 20]*/));

我当前的解决方案:适用于只有两个项目要比较的情况,但不适用于第三个项目,我可以做到这一点,以便我循环并将获得的值与下一个数组进行比较,但我没有认为我走在正确的道路上......另外,我没有使用 reduce 来实现它......而且我不确定我是否应该使用“参数”。任何帮助表示赞赏!非常感谢。

function intersection(arrays) {
array = [];
for (var i = 0; i < arguments.length; i++)
array.push(arguments[i]);

var result = [];

for(var i = 0; i < array.length - 1; i++) {
for(var j = 0; j < array[i].length; j++) {
if (array[i+1].includes(array[i][j]))
result.push(array[i][j]);
}
}

return result;
}

最佳答案

虽然,正如一些建议所说,您可以使用 underscore , lodash ,或者我个人最喜欢的, Ramda (免责声明:我是作者之一),这个函数应该足够简单,你甚至不会考虑为它创建一个库。这是一个简单的版本:

const intersection = (xs, ys) => xs.filter(x => ys.indexOf(x) > -1);
intersection([5, 10, 15, 20, 3], [15, 88, 3, 1, 5, 7]); //=> [5, 15, 3]

const intersectAll = (...xss) => xss.reduce(intersection);
intersectAll([5, 10, 15, 20, 3], [15, 88, 3, 1, 5, 7], [1, 10, 15, 5, 20]); //=> [5, 15]

我认为这就是您所需要的,至少只要您只担心引用/原始相等性并且不需要考虑您想知道 {x: 1} 的情况{x: 1} 是相同的,即使它们不是相同的引用。如果你确实需要它,你可以看看 Ramda 的 intersection功能。

请注意,如果 includes better supported ,我会推荐这个版本,因为它读起来更好:

const intersection = (xs, ys) => xs.filter(x => ys.includes(x));

此外,如果您不需要二元函数,您可以通过组合以上两个来制作它的可变版本:

const intersection = (...xss) => xss.reduce((xs, ys) => xs.filter(x => ys.indexOf(x) > -1));

关于javascript - 使用 Reduce 比较多个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41915599/

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