recorrer objects for array javascript jquery arrays object

javascript - objects - object jquery



javascript encuentra y elimina objetos en una matriz en funciĆ³n del valor clave (11)

Puedo grep la matriz para la identificación, pero ¿cómo puedo eliminar el objeto completo donde id == 88

Simplemente filtra por el predicado opuesto:

var data = $.grep(data, function(e){ return e.id != id; });

He estado probando varios enfoques sobre cómo encontrar un objeto en una matriz, donde ID = var, y si se encuentra, eliminar el objeto de la matriz y devolver la nueva matriz de objetos.

Datos:

[ {"id":"88","name":"Lets go testing"}, {"id":"99","name":"Have fun boys and girls"}, {"id":"108","name":"You are awesome!"} ]

Puedo buscar en la matriz usando jQuery $ grep;

var id = 88; var result = $.grep(data, function(e){ return e.id == id; });

Pero ¿cómo puedo eliminar el objeto completo cuando id == 88 y devolver datos como este?

Datos:

[ {"id":"99","name":"Have fun boys and girls"}, {"id":"108","name":"You are awesome!"} ]


Asegúrese de forzar la identificación del objeto a un número entero si prueba la igualdad estricta:

var result = $.grep(data, function(e, i) { return +e.id !== id; });

Demo


Hay un nuevo método para hacer esto en ES6 / 2015 usando findIndex y el operador spread spread:

const index = data.findIndex(obj => obj.id === id); const newData = [ ...data.slice(0, index), ...data.slice(index + 1) ]

Puede convertirlo en una función para su posterior reutilización como esta:

function remove(array, key, value) { const index = array.findIndex(obj => obj[key] === value); return index >= 0 ? [ ...this.slice(0, index), ...this.slice(index + 1) ] : this; }

De esta forma, puede eliminar elementos con diferentes claves usando un método (y si no hay ningún objeto que cumpla con los criterios, se obtiene la matriz original devuelta):

const newData = remove(data, "id", "88"); const newData2 = remove(data, "name", "You are awesome!");

O puede ponerlo en su Array.prototype:

Array.prototype.remove = function (key, value) { const index = this.findIndex(obj => obj[key] === value); return index >= 0 ? [ ...this.slice(0, index), ...this.slice(index + 1) ] : this; };

Y úsalo de esta manera:

const newData = data.remove("id", "88"); const newData2 = data.remove("name", "You are awesome!");


Puedes simplificar esto, y realmente no hay necesidad de usar jquery aquí.

var id = 88; for(var i = 0; i < data.length; i++) { if(data[i].id == id) { data.splice(i, 1); break; } }

Simplemente itere a través de la lista, encuentre la identificación correspondiente, empalme, y luego rompa para salir de su ciclo


Si usa subrayados js, es fácil eliminar objetos en función de la clave. http://underscorejs.org Ejemplo:

var temp1=[{id:1,name:"safeer"}, //temp array {id:2,name:"jon"}, {id:3,name:"James"}, {id:4,name:"deepak"}, {id:5,name:"ajmal"}]; var id = _.pluck(temp1,''id''); //get id array from temp1 var ids=[2,5,10]; //ids to be removed var bool_ids=[]; _.each(ids,function(val){ bool_ids[val]=true; }); _.filter(temp1,function(val){ return !bool_ids[val.id]; });


Suponiendo que los identificadores son únicos y que solo tendrá que eliminar el splice un elemento debería hacer el truco:

var data = [ {"id":"88","name":"Lets go testing"}, {"id":"99","name":"Have fun boys and girls"}, {"id":"108","name":"You are awesome!"} ], id = 88; console.table(data); $.each(data, function(i, el){ if (this.id == id){ data.splice(i, 1); } }); console.table(data);


Tal vez estás buscando la función $.grep() :

arr = [ {"id":"88","name":"Lets go testing"}, {"id":"99","name":"Have fun boys and girls"}, {"id":"108","name":"You are awesome!"} ]; id = 88; arr = $.grep(arr, function(data, index) { return data.id != id });


aquí hay una solución si no estás usando jquery:

myArray = myArray.filter(function( obj ) { return obj.id !== id; });


sift es un poderoso filtro de colección para operaciones como esta y otras mucho más avanzadas. Funciona del lado del cliente en el lado del navegador o del servidor en node.js.

var collection = [ {"id":"88","name":"Lets go testing"}, {"id":"99","name":"Have fun boys and girls"}, {"id":"108","name":"You are awesome!"} ]; var sifted = sift({id: {$not: 88}}, collection);

Admite filtros como $in , $nin , $exists , $gte , $gt , $lte , $lt , $eq , $ne , $mod , $all , $and , $or , $nor , $not , $size , $type y $regex , y se esfuerza por ser compatible con API con el filtrado de la colección MongoDB.


Array.prototype.removeAt = function(id) { for (var item in this) { if (this[item].id == id) { this.splice(item, 1); return true; } } return false; }

Esto debería hacer el truco, jsfiddle


var items = [ {"id":"88","name":"Lets go testing"}, {"id":"99","name":"Have fun boys and girls"}, {"id":"108","name":"You are awesome!"} ];

Si está utilizando jQuery, use jQuery.grep esta manera:

items = $.grep(items, function(item) { return item.id !== ''88''; }); // items => [{ id: "99" }, { id: "108" }]

Usando ES5 Array.prototype.filter :

items = items.filter(function(item) { return item.id !== ''88''; }); // items => [{ id: "99" }, { id: "108" }]