使用filter()根据另一个大小未知的数组测试数组

anhgbhbe  于 2021-09-23  发布在  Java
关注(0)|答案(1)|浏览(305)

我正在处理mdn页面上详细说明array.prototype.filter()的示例代码,我发现了一些有趣的事情。
我将示例代码修改为以下内容:

const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const result = words.filter(word => word.includes('e', 'i'));

console.log(result);
// expected output: const result = words.filter(word => word.includes('e', 'i'));

console.log(结果);//预期输出:阵列[“精英”、“旺盛”、“毁灭”、“当前”]
但是,当我修改它,使这两个字符位于一个变量中时,它就工作了(用 constvar )...

const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
var test = ['e', 'i'];
const result = words.filter(word => word.includes(test));

console.log(result);
// expected output: Array ["elite", "exuberant", "destruction", "present"]
// ACTUAL OUTPUT: Array []

最后,如果我改变 testtest[0,1] 我得到了第一个结果——正如预期的那样。
其他类似的问题似乎对我没有帮助,我也不太确定这里发生了什么,或者我如何才能做到这一点。

mrfwxfqh

mrfwxfqh1#

问题是,有变量的版本与没有变量的版本做的事情不同。 word.includes('e', 'i') 不一样 word.includes(['e', 'i']) (尽管两者都不是你想的那样,如下所述)。
如果要将参数存储在数组中,并在函数调用中将其作为多个参数(展开)应用,而不是作为单个数组参数,则可以使用展开语法:

const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
var test = ['e', 'i'];
const result = words.filter(word => word.includes(...test));

console.log(result);

真正的问题

这里真正的问题是您没有正确调用函数。检查mdn文档中的字符串#包括: includes(searchString) searchstring要在str中搜索的字符串。
此函数只接受一个参数。所以当你 word.includes('e', 'i') ,您不应该期望它与包含“i”的单词匹配。只有“e”。
如果要匹配包含所有要匹配字符串的单词,则需要重做逻辑:

const words = ['spray', 'limit', 'elite', 'exuberant', 'destruction', 'present'];
const test = ['e', 'i'];

const containsAll = words.filter( word => test.every (str => word.includes(str)))
const oneOf = words.filter( word => test.some (str => word.includes(str)))

console.log(containsAll);
console.log(oneOf);

相关问题