JavaScript - indexOf不够具体

3
有一种方法可以降低indexOf的灵敏度吗? 像这样
var arr = ["Hello", "stackoverflow"]
var idx = arr.indexOf("stack")

将idx的值从-1改为1


1
@Joe:我猜他理解了这个,但是他正在寻找一种匹配“stack%”的方法。 - potashin
2个回答

4
你需要编写自己的函数来实现。以下类似的代码可以实现该功能:
function searchArr(arr, str) {
    for (var i=0;i<arr.length;i++) {
        if (arr[i].indexOf(str) !== -1) return i;
    }
    return -1;
}
searchArr(arr, 'stack');// returns 1

这段代码会简单地遍历你作为第一个参数输入的数组,直到找到包含搜索字符串的元素时停止。


1
如果数组中没有任何单词与搜索项“匹配”,该怎么办? - Bergi
1
@Bergi然后它完成整个循环,并返回undefined。---我已经编辑过了,现在它在找不到匹配项时返回-1。 - Joeytje50
是的,那就是我所要求的,谢谢(加一) :-) - Bergi

1
以下将返回一个由 true 和 false 组成的数组,显示哪些数组元素与 "stack" 匹配。
var arr = ["Hello", "stackoverflow"];
var idx =arr.map(function(s) {return s.indexOf("stack") !== -1});

如果只想检查是否存在匹配项,可以使用
var arr = ["Hello", "stackoverflow"];
var matchFound =arr.some(function(s) {return s.indexOf("stack") !== -1});

值得注意的是,这在IE8中不起作用。 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map#Browser_compatibility)。 - Joeytje50
这样的数组并不完全符合OP的要求,是吗? - Bergi
不清楚他想要什么 - 样例代码似乎既想要一个数组索引又想要一个位置索引。 - Dag Sondre Hansen
1
为了检查它是否存在,应该使用 some 而不是 filter - Bergi
在我看来,最佳实践是使用 polyfill 来弥补这个问题 - polyfill 通常可以在 MDN 上找到(你提供的链接就是一个很好的例子)。这似乎是从新的、本地的 Javascript 添加中受益的唯一逻辑方式。 - Dag Sondre Hansen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接