我是 JS 的新手,有一个项目可以在不使用 indexOf 内置函数的情况下查找数组元素的索引。我试图寻找解决方案,但我得到的只是上述内置函数的示例,我已经知道如何使用它们。任何人都可以提供一个简单的例子让我继续吗? 我的想法是这样的,但请注意我是新手,这是我真正想了解的学术练习:
var index;
var target = 10;
for(var val in collection){
if(collection[val] === target){
index = val;
}
return index;
}
最佳答案
这个尝试几乎是正确的。您似乎已经了解需要什么:遍历数组的元素直到找到匹配项,然后返回该匹配项的索引。
不过,您犯了一些错误。让我们逐步了解一些改进。
您的
return
语句在循环内,但在if
之外。如果找到匹配项,您只想返回
。目前,您总是在循环的第一次迭代后返回!function myIndexOf(collection, target) { var index; for(var val in collection){ if(collection[val] === target){ index = val; return index; } } }
不需要单独的
index
变量。您可以在确定答案正确后立即返回val
。function myIndexOf(collection, target) { for(var val in collection){ if(collection[val] === target){ return val; } } }
您应该使用数字
for
循环来循环,而不是for-in
循环。for-in
循环不保证有一个固定的顺序,所以你可能不会总是得到匹配的最低索引。 (此外,for-in
可以匹配非数字属性名称,这可能不是您想要的。)function myIndexOf(collection, target) { for(var val=0; val<collection.length; val++){ if(collection[val] === target){ return val; } } }
要像
indexOf
一样,您可以在找不到匹配项时返回-1
。function myIndexOf(collection, target) { for(var val=0; val<collection.length; val++){ if(collection[val] === target){ return val; } } return -1; }
关于javascript - 在不使用内置 indexOf 函数的情况下查找数组元素的索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30375616/