Rimuovi l’elemento dell’array in base alla proprietà dell’object

Ho una serie di oggetti come questi:

var myArray = [ {field: 'id', operator: 'eq', value: id}, {field: 'cStatus', operator: 'eq', value: cStatus}, {field: 'money', operator: 'eq', value: money} ]; 

Come posso rimuovere uno specifico in base alla sua proprietà?

Ad esempio, come rimuovere l’object dell’array con “money” come proprietà del campo?

Una possibilità:

 myArray = myArray.filter(function( obj ) { return obj.field !== 'money'; }); 

Si noti che il filter crea una nuova matrice. Qualsiasi altra variabile che fa riferimento all’array originale non otterrebbe i dati filtrati anche se aggiorni la tua variabile originale myArray con il nuovo riferimento. Usare con caucanvas.

Scorrere l’array e splice quelli che non si desidera. Per un utilizzo più semplice, iterare all’indietro in modo da non dover tenere conto della natura live dell’array:

 for (var i = myArray.length - 1; i >= 0; --i) { if (myArray[i].field == "money") { myArray.splice(i,1); } } 

Ecco un’altra opzione usando jQuery grep. Passa true come terzo parametro per garantire che grep rimuova gli elementi che corrispondono alla tua funzione.

 users = $.grep(users, function(el, idx) {return el.field == "money"}, true) 

Se stai già utilizzando jQuery, non è richiesto alcuno shim, che potrebbe essere utile piuttosto che usare Array.filter .

Supponi di voler rimuovere il secondo object dalla sua proprietà di campo.

Con ES6 è facile come questo.

 myArray.splice(myArray.findIndex(item => item.field === "cStatus"), 1) 

Puoi usare il findIndex di lodash per ottenere l’indice dell’elemento specifico e poi unirlo usando.

 myArray.splice(_.findIndex(myArray, function(item) { return item.value === 'money'; }), 1); 

Aggiornare

Puoi anche utilizzare findIndex () di ES6 ()

Il metodo findIndex () restituisce l’indice del primo elemento dell’array che soddisfa la funzione di test fornita. Altrimenti viene restituito -1.

 myArray.splice(myArray.findIndex(myArray, function(item) { return item.value === 'money'; }), 1); 

Di seguito è riportato il codice se non si utilizza jQuery. dimostrazione

 var myArray = [ {field: 'id', operator: 'eq', value: 'id'}, {field: 'cStatus', operator: 'eq', value: 'cStatus'}, {field: 'money', operator: 'eq', value: 'money'} ]; alert(myArray.length); for(var i=0 ; i 

Puoi anche usare la libreria di sottolineatura che ha molte funzioni.

Underscore è una libreria di utilità per JavaScript che fornisce molto supporto alla programmazione funzionale

 var myArray = [ {field: 'id', operator: 'eq', value: id}, {field: 'cStatus', operator: 'eq', value: cStatus}, {field: 'money', operator: 'eq', value: money} ]; console.log(myArray.length); //3 myArray = $.grep(myArray, function(element, index){return element.field == "money"}, true); console.log(myArray.length); //2 

L’elemento è un object nell’array. Il terzo parametro true significa che restituirà un array di elementi che non funziona nella logica della propria funzione, i false mezzi restituiranno un array di elementi che non funziona nella logica della funzione.

La soluzione di jAndy è probabilmente la migliore, ma se non puoi fare affidamento sul filtro puoi fare qualcosa del tipo:

 var myArray = [ {field: 'id', operator: 'eq', value: 'id'}, {field: 'cStatus', operator: 'eq', value: 'cStatus'}, {field: 'money', operator: 'eq', value: "money"} ]; myArray.remove_key = function(key){ var i = 0, keyval = null; for( ; i < this.length; i++){ if(this[i].field == key){ keyval = this.splice(i, 1); break; } } return keyval; } 
 var myArray = [ {field: 'id', operator: 'eq', value: 'id'}, {field: 'cStatus', operator: 'eq', value: 'cStatus'}, {field: 'money', operator: 'eq', value: 'money'} ]; var newArray = _.remove(myArray, function(n) { return n.value === 'money';; }); console.log('Array'); console.log(myArray); console.log('New Array'); console.log(newArray); 
  

Sulla base di alcuni commenti sopra riportati di seguito è riportato il codice su come rimuovere un object basato su un nome chiave e un valore chiave

  var items = [ { "id": 3.1, "name": "test 3.1"}, { "id": 22, "name": "test 3.1" }, { "id": 23, "name": "changed test 23" } ] function removeByKey(array, params){ array.some(function(item, index) { return (array[index][params.key] === params.value) ? !!(array.splice(index, 1)) : false; }); return array; } var removed = removeByKey(items, { key: 'id', value: 23 }); console.log(removed);