2010-02-07 81 views
0

我知道該項目的名稱,並想知道它在陣列中的位置,我該怎麼做?如何找出數組中包含的項目的位置?

+0

這是什麼類型的產品? – 2010-02-07 15:01:16

+1

您的意思是,您知道數組中項目的值,並且您想知道數字鍵,或者您知道對象/關聯數組中項目的鍵/屬性名稱,並且想知道該位置? – JAL 2010-02-07 15:03:59

+0

缺少規格:如果元素不止一次出現在數組中,您希望發生什麼?如果找不到該元素會發生什麼? – 2010-02-07 15:04:20

回答

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

+1對OP的說明:請注意,並非所有實現都有此功能;如果不存在,請參閱馬克·比爾斯的答案。 – 2010-02-07 15:14:00

1

使用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

2

你可以通過數組循環:

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' ; 
}); 
相關問題