我正在处理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(结果);//预期输出:阵列[“精英”、“旺盛”、“毁灭”、“当前”]
但是,当我修改它,使这两个字符位于一个变量中时,它就工作了(用 const
或 var
)...
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 []
最后,如果我改变 test
到 test[0,1]
我得到了第一个结果——正如预期的那样。
其他类似的问题似乎对我没有帮助,我也不太确定这里发生了什么,或者我如何才能做到这一点。
1条答案
按热度按时间mrfwxfqh1#
问题是,有变量的版本与没有变量的版本做的事情不同。
word.includes('e', 'i')
不一样word.includes(['e', 'i'])
(尽管两者都不是你想的那样,如下所述)。如果要将参数存储在数组中,并在函数调用中将其作为多个参数(展开)应用,而不是作为单个数组参数,则可以使用展开语法:
真正的问题
这里真正的问题是您没有正确调用函数。检查mdn文档中的字符串#包括:
includes(searchString)
searchstring要在str中搜索的字符串。此函数只接受一个参数。所以当你
word.includes('e', 'i')
,您不应该期望它与包含“i”的单词匹配。只有“e”。如果要匹配包含所有要匹配字符串的单词,则需要重做逻辑: