gpt4 book ai didi

Javascript:通过包含方法过滤数组

转载 作者:行者123 更新时间:2023-12-03 09:38:58 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





String methods with higher-order functions

(2 个回答)


2年前关闭。




通过将自定义函数传递给 filter 可以在 Javascript 中过滤数组。方法:

const bigArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const filteredArray = bigArray.filter(item => item < 5);

也可以将函数作为“引用”传递:
function largerThanFive(item) {
return item => item < 5;
}

const bigArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const filteredArray = bigArray.filter(largerThanFive);

我尝试使用它通过以下方式与两个数组相交:
const bigArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const smallArray = [0, 1, 2];
const filteredArray = bigArray.filter(smallArray.includes);

但我得到了错误: TypeError: Cannot convert undefined or null to object
我不明白为什么。有人可以详细说明吗?

最佳答案

通过使用原型(prototype)函数,您将失去对对象 smallArray 的引用.在这种情况下,您需要将对象与 Function#bind 绑定(bind)。 ,

const bigArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const smallArray = [0, 1, 2];
const filteredArray = bigArray.filter(Array.prototype.includes.bind(smallArray));

console.log(filteredArray);


或使用 thisArg Array#filter 的参数.

const bigArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const smallArray = [2, 1, 0];
const filteredArray = bigArray.filter(Array.prototype.includes, smallArray);

console.log(filteredArray); // 2 is missing


但是以上两种方法都不起作用 , 因为 Array#includes 使用第二个参数 fromIndex ,它从调用函数移交为 index并省略要检查的索引较小的值。

因此,您需要一个支持与方法提供的 api 相同的函数签名或在回调使用时更小的函数。

例如,一种工作方法是使用 Set 作为 thisArg连同 Set#has 作为回调。此方法仅使用一个参数,非常适合。

const bigArray = [1, 2, 3, 4, 5, 6, 7, 8, 9];
const smallArray = [2, 1, 0];
const filteredArray = bigArray.filter(Set.prototype.has, new Set(smallArray));

console.log(filteredArray);

关于Javascript:通过包含方法过滤数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60265629/

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