如何找出数组中包含的项目的位置?

问题描述:

我知道该项目的名称,并想知道它在阵列中的位置,我该怎么做?如何找出数组中包含的项目的位置?

+0

这是什么类型的产品? – 2010-02-07 15:01:16

+1

您的意思是,您知道数组中项目的值,并且您想知道数字键,或者您知道对象/关联数组中项目的键/属性名称,并且想知道该位置? – JAL 2010-02-07 15:03:59

+0

缺少规格:如果元素不止一次出现在数组中,您希望发生什么?如果找不到该元素会发生什么? – 2010-02-07 15:04:20

["a","b","c","d","e"].indexOf("c") 
2 
+2

+1对OP的说明:请注意,并非所有实现都有此功能;如果不存在,请参阅马克·比尔斯的答案。 – 2010-02-07 15:14:00

使用Array的indexOf方法。如果没有,请添加它(代码示例here或其他地方)。

如果你想找到它的名称属性的值,这样做:

for (var i = 0; i < this.length; i++) { 
    if(this[i].name == name) { 
     return i; 
    } 
} 
return -1; 
+0

不应该是'if(!Array.prototype.indexOf){'?我很确定'Array'(构造函数)从来没有'indexOf'。 – 2010-02-07 15:14:35

+0

感谢您的链接。我不知道那件事。 – 2010-02-07 15:20:15

+0

@ T.J。 Crowder:在Mozilla的实现中,我不确定为什么构造函数有原型成员...'Array.hasOwnProperty('indexOf')== true;'...很奇怪你不觉得吗? – CMS 2010-02-07 15:26:26

你可以通过数组循环:

var array = ['item1', 'item2', 'item3']; 
function findIndex(array, item) { 
    for (var i = 0; i < array.length; i++) { 
     if (array[i] === item) { 
      return i; 
     } 
    } 
    return -1; 
} 

alert(findIndex(array, 'item2')); 

,或者使用比较器功能更复杂的类型:

var array = ['item1', 'item2', 'item3']; 
function findIndex(array, comparer) { 
    for (var i = 0; i < array.length; i++) { 
     if (comparer(array[i])) { 
      return i; 
     } 
    } 
    return -1; 
} 

var index = findIndex(array, function(item) { 
    return item === 'item2' ; 
});