如何在List中更新Map

时间:2017-05-28 05:04:11

标签: javascript immutable.js

如果我有一个不可变的列表,如:

List([
    Map({ something: 1 }),
    Map({ something: 2 }),
])

如何设置= = 5的东西= 1?

2 个答案:

答案 0 :(得分:1)

您可以使用map + set来实现

console.clear();

const list = Immutable.List([
    Immutable.Map({ something: 1 }),
    Immutable.Map({ something: 2 }),
    Immutable.Map({ something: 4 }),
    Immutable.Map({ something: 1 })
])


const newList = list.map(item => 
    item.get("something") === 1 ? item.set("something", 5) : item
);

console.log('Old',JSON.stringify(list.toArray(),null, ""));
console.log('New',JSON.stringify(newList.toArray(),null, ""));
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.7.2/immutable.min.js"></script>

答案 1 :(得分:0)

如果您正在寻找特定的密钥,@ Qop的答案将会很有效。

如果您想更新每个地图中的多个值,可以在list.map调用中使用.mapEntries()

things
    .map(thing => {
      return thing.mapEntries(([ k, v ]) => {
        const val = (v === 5) ? 1 : v;
        return [ k, val ]
      })
    });

here is a link to working plunk