2009-11-18 6 views
20

I mit einer Reihe von JavaScript gerade arbeiteten Objekte als solche:Mit jQuery InArray mit Array von JavaScript-Objekten

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

Mein Ende Anstrengung versucht, ein Objekt aus dem Array zu entfernen, wenn ich die ID des weiß Objekt. Ich versuche, den Code zu verwenden, die so etwas wie diese:

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

So zeigt dies, dass ich versuche, jQuery grep zu verwenden, um ein Element von Index (i) zu entfernen, die ich abrufen versuche mit Hilfe jQuery inArray. Natürlich wird der obige Code nicht funktionieren, weil "2" einem Element im Array entsprechen sollte, bei dem es sich um alle JavaScript-Objekte handelt (ein Objekt wird niemals "2" sein). Ich brauche so etwas wie:

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

Hat jemand jemals einen Erfolg mit InArray hatte Indizes von JavaScript-Objekten zu erhalten, um einen Feldwert innerhalb dieses Objekts verwendet? Jede Hilfe wäre willkommen. Vielen Dank.

UPDATE/CLARIFICATION: Ein paar Leute wurden durch meine Frage verwirrt, aber ich erhielt eine Antwort, die dennoch funktioniert. Ich benutze:

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

Ich denke, ich dachte darüber zu tief, wenn die Lösung wirklich ziemlich einfach war. Ich wollte einfach ein JavaScript-Objekt aus einem Array entfernen, solange ich den Wert einer bestimmten Eigenschaft in diesem Objekt kannte. Die obige Lösung verwendet jQuerys grep, um alles aus dem Array zurückzugeben, mit Ausnahme von Objekten mit der ID == "2". Wie immer, danke für die schnellen Antworten. Ein paar Antworten waren gute Lösungen und hätten funktioniert (zB mit "splice"), aber diese Lösung scheint die kürzeste zu sein. Danke noch einmal.

+0

Ich habe keine Ahnung, was Sie erreichen wollen ... – Greg

+0

wussten nicht, die .grep Methode überhaupt - es ist toll, für kleineren Arrays (btw, warum heißt es grep?); es dupliziert jedoch das Array, so dass es für größere Datasets besser sein kann, Elemente aus dem ursprünglichen Array zu entfernen, aber das hängt stark davon ab, was Sie erreichen wollen :) – Patonza

Antwort

33

n ist Ihr Listeneintrag, so etwas wie dies sollte die Arbeit machen:

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

Das scheint zu tun, was ich tun musste. Vielen Dank! –

+1

Kann auch strengen Vergleich verwenden,! == statt! = –

6

nicht sicher, ob ich Ihre Frage richtig verstanden hat, aber ich tun würde:

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

+1 sehr elegante Lösung. –

0

ohne Verwendung von jQuery oder andere Gerüste:

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

Simplify ??

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

Warum eine Liste von Hashes, wenn ein einzelner Hash tut?

+0

Wollte nicht zu sehr ins Detail in meiner Frage gehen, aber ich habe mehr Daten in einem "Problem" als nur Name und ID. Es gibt insgesamt 5 Felder, also wäre ein Hash ungenügend gewesen. Danke für die Idee. –

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