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