我有一个排序的数组,例如
var arr = [ "aasd","march","mazz" ,"xav" ];
我想找到第一个出现在" m"这里它将是1。你是否有办法在没有循环整个阵列的情况下如何做到这一点?
答案 0 :(得分:5)
如果没有循环整个阵列,有什么方法可以做到吗?
是的,循环直到找到匹配为止。
如果您想避开for
或while
构造,可以使用Array
find()
方法。
例如,arr.find(word => word.startsWith("m"))
应该返回您期望的结果(如果没有这样的词,则返回未定义)。
答案 1 :(得分:5)
您可以使用二进制搜索来查找以该字母开头的任何单词,然后向后循环直到您获得第一个单词。
答案 2 :(得分:3)
您可以使用find()
功能搜索符合约束条件的第一个匹配项。
startsWith()
功能可轻松解决此问题:
// Your array
var arr = [ "aasd","march","mazz" ,"xav" ];
// This will find the first match that starts with "m"
arr.find(function(word){ return word.startsWith('m');}); // yields "march"
或者,如果您需要更广泛的模式匹配,可以通过test()
函数使用正则表达式,这可以在以下示例中看到并处理相同的场景(匹配以“ m“):
// Your array
var arr = [ "aasd","march","mazz" ,"xav" ];
// First match that starts with "m"
var match = arr.find(function(word){ return /^m/i.test(word);}); // yields "march"
示例强>
var arr = ["aasd", "march", "mazz", "xav"];
var match = arr.find(function(word) { return /^m/i.test(word); });
alert(match);
答案 3 :(得分:1)
您不需要遍历整个数组 - 只有在您找到自己感兴趣的内容之前
function findFirstIndex(arr, char){
for(var i=0;i<arr.length;i++){
if(arr[i].substring(0,1) === char)
return i;
}
return -1; // not found
}
答案 4 :(得分:0)
您可以使用Array#some()
some()
方法测试数组中的某个元素是否通过了由提供的函数实现的测试。
function find(letter, array) {
var index;
array.some(function (a, i) {
if (a[0] === letter) {
index = i;
return true;
}
});
return index;
}
var arr = ["aasd", "march", "mazz", "xav"];
document.write(find('m', arr));
&#13;