Tengo una serie de objetos:
[{"value":"14","label":"7"},{"value":"14","label":"7"},{"value":"18","label":"7"}] Cómo puedo eliminar este elemento {"value":"14","label":"7"} que da como resultado la nueva matriz:
[{"value":"14","label":"7"},{"value":"18","label":"7"}]?
En ES6 (o usando es6-shim ) puede usar Array.prototype.findIndex junto con Array.prototype.splice :
arr.splice(arr.findIndex(matchesEl), 1); function matchesEl(el) { return el.value === '14' && el.label === '7'; }O si una copia de la matriz está bien (y disponible desde ES5), Array.prototype.filter es el camino a seguir:
var withoutEl = arr.filter(function (el) { return !matchesEl(el); });Si tiene identidad de objeto, no solo igualdad de objetos (es decir, está tratando de eliminar un objeto específico de la matriz, no solo un objeto que contiene los mismos datos que un objeto existente), puede hacerlo de manera muy simple con splice e indexOf:
a = {x:1} b = {x:2} arr = [a,b]Digamos que desea eliminar b:
arr.splice( arr.indexOf(b), 1 );La pregunta no deja claro si estamos tratando con identidad o igualdad. Si tiene igualdad (dos objetos que contienen las mismas cosas, que se ven iguales entre sí, pero que en realidad no son el mismo objeto), necesitará una pequeña función de comparación, que podemos pasar a findIndex.
a = {x: 1}; b = {x: 2}; arr = [a, b];Ahora queremos eliminar c, que es igual a, pero no lo mismo que a:
c = {x: 1} index = arr.findIndex( (i) => ix === cx ) if (index !== -1) { arr.splice( index, 1 ); }Tenga en cuenta que estoy pasando una función lambda de estilo ES6 aquí como el primer parámetro para findIndex.
A menos que tenga el lujo de escribir solo para navegadores perennes, probablemente querrá usar un transpilador como Babel para usar esta solución.
Si le importa la inmutabilidad y desea devolver una nueva matriz, puede hacerlo con el filtro:
a = {x: 1}; b = {x: 2}; arr = [a, b];Quedémonos con todo lo que no sea:
newArr = arr.filter((x) => x != a)Tratar:
var ar = [{"value":"14","label":"7"},{"value":"14","label":"7"},{"value":"18","label":"7"}]; for(var i=0; i < ar.length; i++) { if(ar[i].value == "14" && ar[i].label == "7") { ar.splice(i,1); } }