Удалить объект из списка ImmutableJS на основе значения свойства

Каким будет самый простой способ удалить объект из списка на основе значения свойства?

Я ищу эквивалент $ pull в MongoDB.

Мой список выглядит просто так:

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

И я хотел бы удалить из массива объект с свойством «1». В MongoDB я бы сделал это следующим образом:

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

Как я могу получить тот же результат с ImmutableJS?

    Вы можете просто filter неизменяемый список:

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

    Тем не менее, filter в непустом List приведет к другому неизменяемому списку, поэтому вы можете сначала проверить появление {a: 1} :

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

    возможно, вы можете попробовать неизменные данные

     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 

    Вам не нужно Immutable ничего конкретного для этого, просто используйте прототипы массива 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) }); 

    Результаты в:

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

    Или вы можете просто получить значение из .filter() с обратным условием:

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

    Это не влияет на массив «на месте», но вы всегда можете «перезаписать» результат.

    Если test переменная уже является объектом .toArray() тогда просто сначала преобразуйте ее с помощью .toArray() и повторно .toArray() назад.