2009-11-18 12 views
20

Sto lavorando con una serie di oggetti JavaScript in quanto tale:utilizzando jQuery inArray con array di oggetti JavaScript

var IssuesArray = [{"ID" : "1", "Name" : "Issue1"}, 
        {"ID" : "2", "Name" : "Issue2"}, 
        {"ID" : "3", "Name" : "Issue3"}]; 

Il mio sforzo fine sta cercando di rimuovere un oggetto dalla matrice quando so l'ID del oggetto. Sto cercando di utilizzare il codice che è qualcosa di simile:

$.grep(IssuesArray, function(n, i) { 
    return i != $.inArray("2", IssuesArray); 
}); 

Quindi questo dimostra che sto cercando di utilizzare jQuery grep per rimuovere un elemento da indice (i), che sto cercando di recuperare utilizzando jQuery inArray. Ovviamente il codice sopra non funzionerà perché "2" dovrebbe corrispondere a un elemento dell'array, che sono tutti oggetti JavaScript (un oggetto non sarà mai uguale a "2"). Ho bisogno di qualcosa di simile:

$.inArray(javascriptObject.Name=="2", IssuesArray); 

Qualcuno ha mai avuto alcun successo utilizzando inArray per ottenere indici di oggetti JavaScript, utilizzando un valore di campo all'interno di tale oggetto? Qualsiasi aiuto sarebbe apprezzato. Grazie.

UPDATE/CLARIFICATION: Un paio di persone sono state confuse dalla mia domanda, ma ho ricevuto una risposta che funziona comunque. Sto usando:

IssuesArray = $.grep(IssuesArray, function(n) { 
    return n.ID != "2"; 
}); 

Penso che ci stavo pensando troppo in profondità, quando la soluzione era davvero piuttosto facile. Volevo semplicemente rimuovere un oggetto JavaScript da un array, purché conoscessi il valore di una particolare proprietà in quell'oggetto. La soluzione di cui sopra utilizza grep di jQuery per restituire tutto dall'array tranne qualsiasi oggetto il cui ID == "2". Come al solito, grazie per le risposte rapide. Un paio di risposte erano buone soluzioni e avrebbero funzionato usando (usando "splice", per esempio), ma questa soluzione sembra essere la più semplice e immediata. Grazie ancora.

+0

: Io non ho idea di che cosa si sta cercando di ottenere ... – Greg

+0

non conosceva il metodo di .grep a tutti - è grande, per gli array più piccoli (a proposito, perché si chiama grep?); duplica l'array, tuttavia, quindi per set di dati più grandi, potrebbe essere meglio rimuovere elementi dall'array originale, ma ciò dipende molto da ciò che si sta cercando di ottenere :) – Patonza

risposta

33

n è il vostro elemento della lista, in modo da qualcosa di simile dovrebbe fare il lavoro:

$.grep(issuesArray, function(n) { return n.ID != "2"; }) 
+0

Questo sembra fare ciò che dovevo fare. Grazie! –

+1

Può anche usare un confronto rigoroso,! == invece di! = –

6

Non sono sicuro se ho capito la sua domanda, ma io farei:

$.each(IssuesArray, function(i, item){ 
    if (item.ID == IDToBeRemoved) IssuesArray.splice(i, 1); 
}); 
+0

+1 soluzione molto elegante. –

0

Senza l'utilizzo di jQuery o altri quadri:

var newArray = []; 
var i=0, len=IssuesArray.length; 
var bad_id = "2"; // or whatever 
while(i<len) { 
    if(IssuesArray[i].ID !== bad_id) { 
    newArray.push(IssuesArray[i++]); 
    } 
} 
0

Semplificare ??

var IssuesArray = { 
    1: "Issue1", 
    2: "Issue2", 
    3: "Issue3" 
}; 
var issue2 = IssuesArray[2]; 

Perché un elenco di hash quando un singolo hash funzionerà?

+0

Non volevo entrare troppo nei dettagli nella mia domanda, ma ho più dati in un "problema" che solo nome e ID. Ci sono 5 campi in totale, quindi un hash sarebbe stato inadeguato. Grazie comunque per l'idea. –

2
var spliceID = function(id, arr) { 
    $(arr).each(function(i, el) { 
     if (el.ID == id) { 
      arr.splice(i,1); 
      return false; 
     } 
    }); 
    return arr; 
} 

console.log(spliceID('2', IssuesArray)); 
Problemi correlati