为什么在尝试使用Array.includes作为Javascript中的Array.filter函数时出现错误?

Jas*_*ews 2 javascript arrays filter

最近,当我在javascript中处理项目时,我尝试了类似于此代码段的内容.我很惊讶地发现它不起作用而是抛出错误.

const test = [1, 2, 3, 4];

const something = [1, 2, 3, 4, ,5, 6, 7, 8].filter(test.includes);

console.log(something);

TypeError: Cannot convert undefined or null to object
    at includes (<anonymous>)
    at Array.filter (<anonymous>)
    at evalmachine.<anonymous>:3:45
    at Script.runInContext (vm.js:74:29)
    at Object.runInContext (vm.js:182:6)
    at evaluate (/run_dir/repl.js:133:14)
    at ReadStream.<anonymous> (/run_dir/repl.js:116:5)
    at ReadStream.emit (events.js:180:13)
    at addChunk (_stream_readable.js:274:12)
    at readableAddChunk (_stream_readable.js:261:11)
Run Code Online (Sandbox Code Playgroud)

这是一个javascript错误还是我在这里误解了一些东西.以下代码段工作正常:

const test = [1, 2, 3, 4];

const something = [1, 2, 3, 4, ,5, 6, 7, 8].filter(item => test.includes(item));

console.log(something);
Run Code Online (Sandbox Code Playgroud)

和:

const test = [1, 2, 3, 4];

const someFunc = theThing => test.includes(theThing);
const something = [1, 2, 3, 4, ,5, 6, 7, 8].filter(someFunc);

console.log(something);
Run Code Online (Sandbox Code Playgroud)

当我看到模式足够容易时,努力实现更具功能性的编程风格和点免费,这似乎是一种不一致.

编辑:这不是重复.我不需要澄清This,只是具体如何在包含函数的上下文中处理它.

Nin*_*olz 6

你可以使用thisArgArray#filter和对象的函数的原型.

const test = [1, 2, 3, 4];

const something = [1, 2, 3, 4, ,5, 6, 7, 8].filter(Array.prototype.includes, test);

console.log(something);
Run Code Online (Sandbox Code Playgroud)

但是Array#includes有第二个参数fromIndex,它由过滤函数移交,即索引,这可能是不需要的.

在这种情况下,您可以更好地使用直接样式.

const test = [1, 2, 3, 4];

const something = [1, 2, 3, 4, ,5, 6, 7, 8].filter(v => test.includes(v));

console.log(something);
Run Code Online (Sandbox Code Playgroud)