Javascript:通过include方法来过滤数组

问题描述 投票:1回答: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

我不明白为什么。有人可以详细说明吗?

javascript arrays built-in
2个回答
4
投票

通过使用原型函数,您失去了对该对象的引用。在这种情况下,您需要使用Function#bind

绑定对象。

Function#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参数。


1
投票

您可以在过滤器中获取每个项目,然后可以检查Array#filter是否具有该项目,

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

console.log(filteredArray);

摘要如下:

smallArray
© www.soinside.com 2019 - 2024. All rights reserved.