Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript .includes()的替代方案?_Javascript_Arrays - Fatal编程技术网

Javascript .includes()的替代方案?

Javascript .includes()的替代方案?,javascript,arrays,Javascript,Arrays,我正在尝试开发一种方法,将数组中的单词(fItems)与转换为数组(stringArray)的字符串中的单词进行匹配。我下面的代码大部分时间都有效,但问题是“includes()”搜索模式,而不是匹配整个单词 举个例子。如果我在找“墙”,它会感到困惑,它会返回“钱包”。此外,我希望输入是灵活的。例如,如果输入了玻璃,“玻璃碎片”项仍然可以返回 有没有更精确的方法来匹配精确的单词 for(设i=0;i

我正在尝试开发一种方法,将数组中的单词(fItems)与转换为数组(stringArray)的字符串中的单词进行匹配。我下面的代码大部分时间都有效,但问题是“includes()”搜索模式,而不是匹配整个单词

举个例子。如果我在找“墙”,它会感到困惑,它会返回“钱包”。此外,我希望输入是灵活的。例如,如果输入了玻璃,“玻璃碎片”项仍然可以返回

有没有更精确的方法来匹配精确的单词

for(设i=0;i来自注释


不,不是直接的比较。我希望输入是灵活的。例如,如果输入了玻璃,“玻璃碎片”项仍然可以返回

听起来你真正想要的是字符串中的模式匹配。正则表达式是最好的选择,因为这就是创建正则表达式的原因(模式匹配和替换选项)

在上面的代码中,
\b
用于表示单词边界,因此
glass
是匹配项,但
glassware
不会匹配<代码>i
用于指定不区分大小写


此外,为了在将表达式放入代码之前对其进行在线测试,您可以使用此网站,我一直使用此网站来验证我构建的表达式是否准确。

我认为您可以使用
split
indexOf
方法代替它。拆分后,可以使用indexOf进行检查

评论:正如Pavlo所说,您还可以使用
includes
,而不是
indexOf
方法

for(设i=0;i
将数据库数据放在一起,你是说直接比较
db.items[i].name==stringArray[j]
因此您正在尝试获取两个数组的交集。查一查,你会发现很多解决方案。不,不是直接的比较。我希望输入是灵活的。例如,如果输入了glass,条目“glass shard”仍然可以返回。这听起来像是字符串上的模式匹配,使用正则表达式代替。由于OP使用的是
Array.includes
,因此他可以选择指定Unicode安全正则表达式。否则,不要忘记
\b
将匹配
\w
和任何非ASCII字符之间的空格,包括英语中常用的字母,如“e”。回答不错,希望OP似乎使用ES2015(
let
),并且答案中的代码是ES5。@Igor-不幸的是,不容易克服
\S
有时可以很好地替代
\w
。谢谢。我必须承认,当有人提到regex时,我有点脸色苍白。我想是时候想办法学了。但它们似乎确实让生活更轻松。我将努力学习如何使用它们。@buckoo-我在最后一个表达式中添加了一个更新,用于搜索unicode文本。如果你处理大量文本,正则表达式确实会让生活变得更简单。我经常使用它们(不是双关语),一旦你开始使用它们,你就会很快掌握它们的窍门。你可以使用
Array\includes
而不是
Array\indexOf
,假设代码是ES2016。@Pavlo感谢你的建议。谢谢你,我刚刚学会了:)我在我发布的原始代码中使用了include,问题是它寻找匹配的模式,而不是整个单词。
let str = 'The glass shard';
let search = 'glass';
let isMatch = new RegExp('\\b'+search+'\\b', 'i').test(str); // i is case insensitive

// If you use unicode characters then this might be a better expression
// thank you @Touffy
let isMatch = new RegExp('(?:^|\\s)'+search, 'i').test(str); // i is case insensitive
for (let i = 0; i < db.items.length; i++) {
        for (let j = 0; j < stringArray.length; j++) {
            if (db.items[i].name.split(' ').indexOf(stringArray[j])!==-1) {
                fItems.push(db.items[i]);
            };
        }
    };