2009-11-18 13 views
20

estoy trabajando con una serie de objetos JavaScript, tales como:Usando jQuery InArray con gran variedad de objetos JavaScript

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

Mi esfuerzo extremo está tratando de eliminar un objeto de la matriz cuando sé el ID de la objeto. Estoy tratando de utilizar código que es algo como esto:

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

Así que esto demuestra que estoy tratando de usar jQuery grep para eliminar un elemento por el índice (i), que estoy tratando de recuperar mediante el uso de jQuery en Array. Por supuesto, el código anterior no funcionará porque "2" debería corresponder a un elemento en la matriz, que son todos los objetos de JavaScript (un objeto nunca será igual a "2"). Necesito algo como:

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

Alguien ha tenido ningún éxito utilizando InArray para obtener índices de objetos JavaScript, utilizando un valor de campo dentro de ese objeto? Cualquier ayuda sería apreciada. Gracias.

ACTUALIZACIÓN/ACLARACIÓN: Algunas personas han sido confundidas por mi pregunta, pero recibí una respuesta que funciona de todos modos. Estoy usando:

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

Creo que estaba pensando demasiado, cuando la solución era realmente fácil. Simplemente quería eliminar un objeto de JavaScript de una matriz, siempre que conociera el valor de una propiedad en particular en ese objeto. La solución anterior usa grep de jQuery para devolver todo desde la matriz excepto cualquier objeto cuya ID == "2". Como de costumbre, gracias por las respuestas rápidas. Un par de respuestas fueron buenas soluciones y habrían funcionado usando (usando "empalme", ​​por ejemplo), pero esta solución parece ser la más corta y directa. Gracias de nuevo.

+0

que no tienen idea de lo que estamos tratando de lograr ... – Greg

+0

no sabía el método .grep en absoluto - es genial, para las matrices más pequeñas (por cierto, ¿por qué se le llama grep?); sin embargo, duplica la matriz, por lo que para un conjunto de datos más grande, puede ser mejor eliminar los elementos de la matriz original, pero eso depende en gran medida de lo que esté intentando archivar :) – Patonza

Respuesta

33

n es su elemento de la lista, así que algo como esto debería hacer el trabajo:

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

Esto parece hacer lo que tenía que hacer. ¡Gracias! –

+1

También puede usar una comparación estricta,! == en vez de! = –

6

No estoy seguro si he entendido bien su pregunta, pero lo haría:

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

+1 solución muy elegante. –

0

Sin usar jQuery u otros marcos:

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

¿Simplificar?

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

¿Por qué una lista de hash cuando un solo hash hará?

+0

No quería entrar en demasiados detalles en mi pregunta, pero tengo más datos en un "Issue" que simplemente Nombre e ID. Hay 5 campos en total, por lo que un hash habría sido inadecuado. Gracias por la idea sin embargo. –

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