2012-10-28 52 views
7

我要作出這樣的工作原理是這樣的函數:的Javascript搜索一個數組的值,並獲得其關鍵

function arraySearch(array, valuetosearchfor) 
{ 
// some code 
} 

如果發現數組中的值,它會返回鍵,在那裏發現價值。如果有多個結果(多於一個鍵)或根本沒有結果(找不到任何結果),則該函數將返回FALSE。

我發現這個代碼:

function arraySearch(arr,val) 
     { 
      for (var i=0; i<arr.length; i++) 
       { 
        if (arr[i] == val) 
        {      
         return i; 
        } 
        else 
        { 
         return false; 
        } 
       } 
     } 

,並用它這樣的:

var resultofarraycheck = arraySearch(board, chosen); 
       if (resultofarraycheck === false) 
       { 
         document.getElementById(buttonid).value; 
         chosen = 0; 
       } 

但它似乎並沒有工作。 當它應該找到某個東西時,它將返回false而不是密鑰(i)。

我該如何解決這個問題,或者我做錯了什麼?

謝謝,如果我的英語不夠清楚,我很抱歉。

+2

移動'回報FALSE'爲* *後的'for'循環。 (並考慮處理具有多個相同結果的情況。) – DCoder

+0

[Iqbal Djulfri的答案](http://stackoverflow.com/a/13109873/1233508)是唯一一個實際滿足您有關重複密鑰的要求的人。 – DCoder

回答

16
function arraySearch(arr,val) { 
    for (var i=0; i<arr.length; i++) 
     if (arr[i] === val)      
      return i; 
    return false; 
    } 
+0

非常感謝!有效。 – shohamh

12

可以使用的indexOf拿到鑰匙jsfiddle

if(!Array.prototype.indexOf){ 
    Array.prototype.indexOf = function(val){ 
     var i = this.length; 
     while (i--) { 
      if (this[i] == val) return i; 
     } 
     return -1; 
    } 
} 

    var arr = ['a','b','c','d','e']; 

    var index = arr.indexOf('d'); // return 3 
+1

除非你需要支持IE <9 ... – DCoder

+0

這是反之亦然,我想從價值 – shohamh

+1

@DCoder我添加supprort爲IE <9 – Anoop

2
function arraySearch(arr, val) { 
    var index; 
    for (var i = 0; i < arr.length; i++) { 
    // use '===' if you strictly want to find the same type 
    if (arr[i] == val) { 
     if (index == undefined) index = i; 
     // return false if duplicate is found 
     else return false; 
    } 
    } 

    // return false if no element found, or index of the element 
    return index == undefined ? false : index; 
} 

希望這有助於:)

相關問題