2012-01-14 150 views

回答

34

考慮使用indexOf,它返回數組中元素的從0開始的位置。

例如

[1,2,3,4].indexOf(3); // produces 2 

請注意,此方法在IE 8及以下版本中不可用。

+2

如果數組是[1,2,3,4,3],那麼如何獲得兩個3s在兩個不同變量上的位置? – CPC 2014-03-10 21:09:27

+0

作爲參考,您可以使用Array.reduce方法返回包含多個元素位置的數組。下面的代碼返回一個位置數組[2,4] - 兩個3s的位置。 var array = [1,2,3,4,3] .reduce(function(array,n,i){if(n === 3)array.push(i); return array;},[]); – RepeatQuotations 2016-02-17 06:04:15

2

或簡單的用一個for循環:

function getPosition(elementToFind, arrayElements) { 
    var i; 
    for (i = 0; i < arrayElements.length; i += 1) { 
     if (arrayElements[i] === elementToFind) { 
      return i; 
     } 
    } 
    return null; //not found 
} 

getPosition(3, [1, 2, 3, 4]); 
4

jQuery提供YOUT與 「inArray」 的功能,類似於PHP:

var a = [1,2,3,4]; 
console.log(jQuery.inArray(3, a)); //returns 2 

如果你已經在你的項目中使用jQuery,這將是要走的路! 如果可能的話,jQuery使用indexOf(最快的解決方案),如果不是,則退回到基於循環的解決方案。

0

正如已經被一些答案指出,在新的瀏覽器陣列有一個像indexOfmapforEach方法是非常方便,以避免編寫大量的for循環。

如果您需要支持舊環境,沒有這些功能我會使用庫(或寫一個你自己的)來實現這些很常見的數組操作(樣的SOC的建議)強烈推薦

var arrayfn = (function(){ 
    var M = {}; 

    M.indexOf = function(array, item){ ... }; 

    M.contains = function(array, item){ return M.indefOf(array, item) !== -1; }; 

    M.map = function(array, callback){ ... }; 
}()); 

arrayfn.contains([1,2,3], 2); 

無論如何,最流行的JS框架應該已經擁有大部分的內建。例如,我記得Dojo,jQuery和Underscore具有其中的一些功能。