react objeto inmutable inmutabilidad immutable framework eliminar elemento delete javascript node.js immutable.js

javascript - objeto - inmutabilidad react



Eliminar objeto de la lista de ImmutableJS basado en el valor de la propiedad (3)

¿Cuál sería la forma más sencilla de eliminar un objeto de una lista basándose en el valor de una propiedad?

Estoy buscando un equivalente al $ pull en MongoDB.

Mi lista se ve tan simple como esto:

[{a: ''1'' , b: ''1''},{a: ''2'' , b: ''2''}]

Y me gustaría eliminar de la matriz el objeto con la propiedad un conjunto a ''1''. En MongoDB, lo haría así:

Model.update({_id: getCorrectParentObj},{ $pull: {listIDeleteFrom: { a: ''1'' } } },(err, result)=>{});

¿Cómo puedo obtener el mismo resultado con ImmutableJS?


No necesita Immutable nada específico para esto, solo use prototipos de matriz de JavaScript:

var test = [{a: ''1'' , b: ''1''},{a: ''2'' , b: ''2''}]; test.map(function(el,idx) { return ( el.a == "1") ? idx : -1 } ).filter(function(el) { return el != -1 }).forEach(function(el) { test.splice(el,1) });

Resultados en:

[ { "a" : "2", "b" : "2" } ]

O simplemente puede obtener el valor de .filter() con una condición inversa:

test.filter(function(el) { return el.a != 1; });

Lo que en realidad no afecta a la matriz "en su lugar", pero siempre se podría "sobrescribir" con el resultado.

Si la variable de test ya es un objeto Immutable , simplemente .toArray() con .toArray() primero y vuelva a convertirla.


Usted podría simplemente filter la lista inmutable:

var test = Immutable.List.of(Immutable.Map({a: ''1''}), Immutable.Map({a: ''2''})); test = test.filter(function(item) { return item.get(''a'') !== ''1'' });

Sin embargo, el filter en una List no vacía resultaría en una lista inmutable diferente, por lo que es posible que desee verificar primero la aparición de {a: 1} :

if (test.some(function(item) { return item.get(''a'') === ''1''; })) { test = test.filter(function(item) { return item.get(''a'') !== ''1'' }); }


tal vez puedas probar immutable-data

var immutableData = require("immutable-data") var oldArray = [{a: ''1'' , b: ''1''},{a: ''2'' , b: ''2''}] var data = immutableData(oldArray) var immutableArray = data.pick() //modify immutableArray by ordinary javascript method var i = 0 immutableArray.forEach(function(item,index){ if (item.a === ''1''){ immutableArray.splice(index-i,1) i++ } }) var newArray = immutableArray.valueOf() console.log(newArray) // [ { a: ''2'', b: ''2'' } ] console.log(newArray[0]===oldArray[1]) // true