2012-10-28 7 views
7

chcę zrobić funkcję, która działa tak:JavaScript wyszukiwać tablicy dla wartości i uzyskać jego klucz

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

jeżeli stwierdzi wartość w tablicy, zwróci klucz, gdzie stwierdzono, wartość. Jeśli istnieje więcej niż jeden wynik (więcej niż jeden klucz) lub brak wyników (nic nie znaleziono), funkcja zwróci FALSE.

znalazłem ten kod:

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

i stosować go tak:

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

Ale to nie wydają się działać. Kiedy powinno coś znaleźć, zwraca wartość false zamiast klucza (i).

Jak mogę to naprawić lub co robię źle?

Dzięki, i przepraszam, jeśli mój angielski nie był wystarczająco jasny.

+2

Move 'return FALSE do * za *' for' pętla. (I pomyśl o obsłudze tego przypadku z wieloma identycznymi wynikami.) – DCoder

+0

[Odpowiedź Iqbala Djulfri] (http://stackoverflow.com/a/13109873/1233508) jest jedynym, który faktycznie spełnia twoje wymagania dotyczące duplikatów kluczy. – DCoder

Odpowiedz

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

Wielkie dzięki! Zadziałało. – shohamh

12

Można użyć indexOf dostać klucz 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

O ile nie trzeba wspierać IE <9 ... – DCoder

+0

Jest to odwrotnie, chcę uzyskać klucz od wartości – shohamh

+1

@DCoder Dodałem supprort dla 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; 
} 

nadzieję, że to pomaga :)

Powiązane problemy