2011-04-18 57 views
0

說我有在JS陣列中的所有陣列的值的指數中:var水果= [蘋果,桔子,香蕉] 欲存儲每個水果的變量的索引,使得在任何點如果我在數組中添加更多的東西,我仍然會知道蘋果的索引是X.所以在這種情況下,0是蘋果,但如果我在開始時添加一些東西,蘋果的索引會發生變化。使用Javascript - 存儲在一個變量

我能想到的更詳細的方法是通過循環陣列

for (var i=0;i<fruits.length;i++) { 
    switch(fruits[i]) { 
    case:"apple" 
     var indexApple = i; 
     break; 
    //etc 
    } 
} 

我能想到的另一種方法是使用陣列的值作爲變量名。

for (var i=0;i<fruits.length;i++) { 
    //psedo code 
    var 'index' + fruits[i] = i; 
} 

所以最終我不得不變種indexApple = 0,indexOrange = 1等的關鍵第二種方法是能夠通過串聯串「索引」和創建一個動態可變創建該變量的數組的值。不知道該怎麼做。

注:理想情況下我要動態地生成存儲索引的變量。這樣我只能修改/添加水果數組,並且會生成一個新變量來存儲索引。

+0

試圖讓我的頭繞着這個(究竟是什麼原因),但它只是扭曲了... – KooiInc 2011-04-18 09:40:12

+0

而不是索引存儲到一個變量。您可以將它存儲在另一個數組中,所以它會很容易獲取它。 – Anish 2011-04-18 09:41:04

+0

你不是在問你有什麼問題,而是已經提出了一個解決方案。我很確定你的問題的真正解決方案與你的建議完全不同(並且比你的建議更簡單)。那麼 - 你真的*想做什麼? – Tomalak 2011-04-18 09:42:55

回答

0

好像確保指數的值是合法的將是困難的。我會包括jquery,並使用inArray方法返回該數組中的項目的索引。

function showIndexes() { 
    var appleIndex = $.inArray(fruits, "Apple"); //returns 0 
    var guavaIndex = $.inArray(fruits, "Guava"); //returns -1 

    fruits.unshift("Guava"); 
    appleIndex = $.inArray(fruits, "Apple"); //returns 1 
    guavaIndex = $.inArray(fruits, "Guava"); //returns 0 
} 
0

最簡單的解決方法是建立,讓你幾乎O(1)查找時間的對象,並會與你的數組規模:

function LinkFruits(fruits) { 
    FruitLookup = {} 
    fruits.forEach((fruit,ind) => FruitLookup[fruit] = ind) 
} 

現在,你可以簡單地「查找」索引需要像當從FruitLookup表:

console.log("The index of apple is",FruitLookup.apple,"and for orange is",FruitLookup.orange) 

現在,如果您修改數組,你只需要運行LinkFruits(fruits)

技術說明:如果你想完全自動化這個過程中,你可以看看Array.observe()這是現在棄用。或者重載此數組的pushpop方法以在返回到默認原型方法之前觸發更新。

相關問題