2011-10-12 34 views
10

Mam tablicę JavaScript, w której każdy nowy element dodawany do tablicy otrzymuje następny przyrostowy numer. Przykładem może być następujący (mam nadzieję Im piśmie, to poprawnie):Jak sprawdzić, czy wartość istnieje w tej tablicy JavaScript?

ArrayofPeople[0] = [{"id": "529", "name": "Bob"}]; 
ArrayofPeople[1] = [{"id": "820", "name": "Dave"}]; 
ArrayofPeople[2] = [{"id": "235", "name": "John"}]; 

Tablica jest nazwany ArrayofPeople, przechowywanie wielu punktów danych dla każdej osoby.

Chcę wiedzieć, czy element o identyfikatorze 820 istnieje w tablicy, czy nie. Jak to się stało?

Odpowiedz

9

coś takiego:

function in_array(array, id) { 
    for(var i=0;i<array.length;i++) { 
     return (array[i][0].id === id) 
    } 
    return false; 
} 

var result = in_array(ArrayofPeople, 235); 
+0

To wydaje się działać dla mnie jeśli jest fałszywe, ale jeśli to prawda, to przestaje działać w ogóle. Co robię źle w tej kontroli ?: 'if (in_array (ArrayofPeople, 235) == true) {alert (" zdarzenie było w tablicy "); } else {alert ("nie w tablicy"); } ' – Oseer

+0

ponieważ przechowujesz id jako string powinieneś zrobić' in_array (arrayofpeople, '235') 'lub musisz usunąć" "z właściwości id w tablicy –

+1

Wow, prawie 4 lata i nikt nie wspomniał, że to kod nie działa! Kod sprawdzi tylko wtedy, gdy identyfikator pierwszego elementu jest równy identyfikatorowi! zmienić treść wewnętrznej pętli na 'if (array [i] [0] .id === id) return true;' –

5

Należy iteracyjne nad tablicy i ręcznie sprawdzić, czy masz identyfikator pasujący:

function getPersonById(id){ 
    for(var i=0,l=ArrayofPeople.length;i<l;i++) 
     if(ArrayofPeople[0][i].id == id) 
      return ArrayofPeople[i]; 
    return null; 
} 

Oczywiście, jest to bardzo nieefektywne. Proponuję, żebyście zapisali swoje obiekty do tablicy asocjacyjnej (a.k.a. obiekt) zindeksowanej przez id danej osoby. Następnie, dostęp do osoby z określonym identyfikatorem jest natychmiastowy, ponieważ obiekty są niczym innym niż hash-tabelach:

ArrayofPeople = {}; 
ArrayofPeople[529] = {"id": "529", "name": "Bob"}; 
ArrayofPeople[820] = {"id": "820", "name": "Dave"}; 
ArrayofPeople[235] = {"id": "235", "name": "John"}; 

function getPersonById(id){ 
    return id in ArrayofPeople 
     ? ArrayofPeople[id] 
     : null; 
} 
1
ArrayofPeople = new Array(); 
ArrayofPeople[0] = [{"id": "529", "name": "Bob"}]; 
ArrayofPeople[1] = [{"id": "820", "name": "Dave"}]; 
ArrayofPeople[2] = [{"id": "235", "name": "John"}]; 

var str = '820'; 
var is_found = 'not found'; 
for(item in ArrayofPeople){ 
    target = ArrayofPeople[item][0]; 
    if(target['id'] === str) 
     is_found = 'found'; 
} 
alert(is_found); 
2

można użyć stosunkowo nowy Array.prototype.some() aby ustalić, czy dany element istnieje (w dokumentacji znajduje się podkładka):

var ArrayofPeople = []; 
 
ArrayofPeople[0] = [{"id": "529", "name": "Bob"}]; 
 
ArrayofPeople[1] = [{"id": "820", "name": "Dave"}]; 
 
ArrayofPeople[2] = [{"id": "235", "name": "John"}]; 
 

 
function in_array(array, id) 
 
{ 
 
    return array.some(function(item) { 
 
     return item[0].id === id; 
 
    }); 
 
} 
 

 
console.log(in_array(ArrayofPeople, '820')); // true

0
function IsIdInArray(array, id) { 
    for (var i = 0; i < array.length; i++) { 
    if (array[i].id === id) 
     return true; 
    } 
    return false; 
} 

var result = IsIdInArray(ArrayofPeople, 820); 
Powiązane problemy