2011-10-12 19 views
10

Diziye eklenen her yeni öğenin sonraki artımlı sayıyı aldığı bir JavaScript dizilim var.Bu JavaScript dizisinde değer olup olmadığını nasıl kontrol edebilirim?

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

dizi ArrayofPeople adlandırılır, her kişi için birden fazla veri noktasını depolanması aşağıdaki gibi örnek olarak, (Im doğru bu yazı umut) olacaktır.

Dizide 820 kimliğine sahip bir öğenin olup olmadığını bilmem gerekiyor. Bu nasıl halledilebilir?

cevap

9

şey böyle: nesneleri karma tablolar daha başka bir şey değildir çünkü Ardından, belli bir kimliğe sahip bir kişiye erişim anında olduğu

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

Bu sahte olup olmadığını benim için çalışmak gibi görünüyor, ama eğer doğruysa hiç çalışmıyorsa durur. Bu kontrolde neyi yanlış yapıyorum ?: eğer (in_array (ArrayofPeople, 235) == true) {alert ("olay dizide idi"); } else {alert ("dizide değil"); } ' – Oseer

+0

çünkü id'leri bir dizge olarak sakladığınızdan, 'in_array (arrayofpeople,' 235 ')' ya da dizideki id özelliğindeki "" özelliğindeki "" öğesinden kaldırmanız gerektiğinden, –

+1

Wow, neredeyse 4 yıl ve bundan hiç kimse bahsetmedi. kod çalışmıyor! Kod, sadece ilk elemanın kimliğinin kimlik parametresine eşit olup olmadığını kontrol edecektir! İç döngü gövdesini "if (dizi [i] [0] .id === id) true olarak döndür; –

5

Sen diziyi sürekli tekrarlanması ve eşleşen bir kimliğe sahip olmadığını elle kontrol etmelidir: Elbette

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

, bu oldukça verimsiz. Nesnelerinizin kimliğine göre indekslenmiş bir ilişkilendirici diziye (a.k.a.) depolanmasını öneririm.

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

Sen nispeten yeni kullanabilirsiniz Array.prototype.some() (a takoz belgelerinde temin edilmiştir) bir madde olup olmadığını bulmaya:

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); 
İlgili konular