2011-10-12 19 views
10

Ho un array JavaScript, in cui ogni nuovo elemento aggiunto all'array ottiene il successivo numero incrementale. Un esempio potrebbe essere il seguente (spero Im scrivendo questo correttamente):Come verificare se il valore esiste in questo array JavaScript?

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

L'array è chiamato ArrayofPeople, la memorizzazione di più punti di dati per ogni persona.

Ho bisogno di sapere se un elemento con id di 820 esiste nell'array o no. Come sarebbe fatto?

risposta

9

Qualcosa di simile a questo:

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

Questo sembra funzionare per me, se è falso, ma se è vero che smette di funzionare del tutto. Cosa sto facendo male in questo controllo ?: 'if (in_array (ArrayofPeople, 235) == true) {alert (" evento era in array "); } else {alert ("not in array"); } ' – Oseer

+0

perché si memorizzano gli id ​​come una stringa che si dovrebbe fare' in_array (arrayofpeople, '235') 'o è necessario rimuovere il" "dalla proprietà id nell'array –

+1

Wow, quasi 4 anni e nessuno ha menzionato che questo il codice non funziona! Il codice controllerà solo se l'id del primo elemento è uguale al parametro id! cambia il corpo del ciclo interno a 'if (array [i] [0] .id === id) restituisce true;' –

5

Si dovrebbe iterare la matrice e verificare manualmente se si dispone di un ID di corrispondenza:

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

Naturalmente, questo è abbastanza inefficiente. Ti suggerisco di conservare i tuoi oggetti in un array associativo (a.k.a. un oggetto) indicizzato dall'ID della persona. Poi, l'accesso a una persona con un certo id è immediato dato che gli oggetti non sono altro che hash-tabelle:

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

È possibile utilizzare il relativamente nuovo Array.prototype.some() per scoprire se esiste un articolo (uno shim è fornito nella documentazione):

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); 
Problemi correlati