Immutable.js:如何通过指定属性值来查找数组中的对象

时间:2016-11-15 16:32:27

标签: javascript immutable.js

我有一个由Immutable.js制作的数组:

    var arr = Immutable.List.of(
        {
            id: 'id01',
            enable: true
        },
        {
            id: 'id02',
            enable: true
        },
        {
            id: 'id03',
            enable: true
        },
        {
            id: 'id04',
            enable: true
        }
    );

如何找到id: id03的对象?我想更新其enable值并获取一个新数组

2 个答案:

答案 0 :(得分:9)

首先,您需要findIndex,然后update您的列表。

const index = arr.findIndex(i => i.id === 'id03')
const newArr = arr.update(index, item => Object.assign({}, item, { enable: false }))

OR

const newArr = arr.update(
  arr.findIndex(i => i.id === 'id03'),
  item => Object.assign({}, item, { enable: false }) 
 )

答案 1 :(得分:4)

我同意@ caspg的答案,但如果您的数组完全Immutable,您也可以使用findIndexsetIn进行撰写:

const updatedArr = arr.setIn([
  arr.findIndex(e => e.get('id') === 'id03'),
  'enable'
], false);

甚至使用updateIn,如果您最终需要更多基于切换的解决方案。