我对JS很新,并且有一个项目来查找数组元素的索引,而不使用内置的indexOf函数。我试图寻找解决方案,但我得到的只是前面提到的内置函数的例子,我已经知道如何使用它。任何人都可以为我提供一个简单的例子吗? 我的想法是这样的,但请注意我是新手,这是一个我真正想要理解的学术练习:
var index;
var target = 10;
for(var val in collection){
if(collection[val] === target){
index = val;
}
return index;
}
答案 0 :(得分:4)
这种尝试几乎是正确的。您似乎已经了解了所需的内容:遍历数组的元素,直到找到匹配项,然后返回该匹配项的索引。
但是,你犯了一些错误。让我们一步一步地进行一些改进。您的return
语句位于循环内部,但位于if
之外。如果找到匹配项,您只想return
。目前,您总是在循环的第一次迭代后返回!
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;
}
答案 1 :(得分:2)
注意:for..in不应该用于遍历数组所在的数组 索引顺序很重要。
var find_index = function(collection, item) {
for (var i = 0; i < collection.length; ++i) {
if (collection[i] === item) {
return i;
}
}
};
find_index([5,4,3,2,1], 5)
答案 2 :(得分:0)
在循环遍历数组时,您应该使用从数组的索引for
到0
的简单Length-1
循环。不要使用for...in
,因为它可以迭代数组的属性,这些属性不是单元格的实际内容,并且无法保证顺序。您希望找到第一个匹配,以获得与.indexOf
相同的行为。所以正确的实现看起来像这样:
function myIndexOf(array, target) {
for (var i=0; i < array.length; i++) {
if (array[i] === target) {
return i;
}
}
// item was not found
return -1;
}
答案 3 :(得分:0)
您可以使用in语句来迭代数组,假设键是值。这里val将是0,1,2 ......所以你可以退货。
然后,您可以使用if中的return:它将停止该函数并返回正确的值,找到您正在寻找的内容。
===是严格的比较运算符,检查var类型,允许您测试这是您正在寻找的确切值。
如果在循环结束时找不到该值,则可以添加带有其他值的返回值(此处为-1)。
function myIndexOf(array, search) {
for(var val in array){
if(array[val] === search){
return val;
}
}
return -1;
}
var myArray = ['a', 'b', 'c'];
console.log(myIndexOf(myArray, 'c')); //2
console.log(myIndexOf(myArray, 'f')); //-1 <- Not found
答案 4 :(得分:0)
你也可以使用它们。遍历数组,如果value与搜索的值不匹配则返回true,因此每次都继续,否则设置ind并返回false。
var getIndex = function(arr, match){
var ind = -1;
arr.every(function(val, index) {
if (val === match){
ind = index;
return false;
}
return true;
});
return ind;
}
getIndex([1, 2, 3], 2);
答案 5 :(得分:0)
这样可行:
var index = 0;
var target = 'c';
var collection = ['a', 'b', 'c', 'd'];
function findIndex(){
for(var val in collection) {
if(collection[val] === target){
return index;
}
index++;
}
}
findIndex();