gpt4 book ai didi

javascript - immutable.js 映射数组 (List) 并添加一个属性

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:33:01 25 4
gpt4 key购买 nike

我刚开始使用 immutable.js,但我无法弄清楚如何在数组中的对象上设置新属性。我无法在文档中找到此类更改的任何示例。

我基本上只是想改变一下:

[{ 
gitInfo: {id: 8001, host: '', …},
module: {id: 24875, name: "blah", …}
}...]

为此:

[{ 
gitInfo: {id: 8001, host: '', …},
module: {id: 24875, name: "blah", isStared: true …}
}...]

所以如果没有 immutable.js,我会得到类似的东西:

function markModules(modules) {
modules.map( (module) => {
module.module.isStarred = false;
if (contains(this.props.stars, module.module.id)) {
module.module.isStarred = true;
}
})
return modules;
}

我假设我需要像 set() with a List 这样的东西,但同样,我没有找到任何如何执行此操作的示例。

感谢您提供任何提示或示例链接。

最佳答案

您将以与没有 Immutable.js (.map) 相同的方式执行此操作。

const data = Immutable.fromJS([{ 
gitInfo: {id: 8001, host: ''},
module: {id: 24875, name: "blah"}
}, {
gitInfo: {id: 6996, host: ''},
module: {id: 666, name: "wef"}
}]);

const transformed = data.map((x) => {
return x.get('module').set('isStarred', true);
})

transformed.toJS() === [
{
"id": 24875,
"name": "blah",
"isStarred": true
},
{
"id": 666,
"name": "wef",
"isStarred": true
}
]

如果你想把额外的逻辑放在那里:

function markModules(modules) {
return modules.map((module) => {
const isStarred = contains(this.props.stars, module.getIn(['module', 'id']));
return module.setIn(['module', 'isStarred'], isStarred);
})
}

关键是将您的 if 语句转换为返回值而不是更新数据结构的值/函数。

关于javascript - immutable.js 映射数组 (List) 并添加一个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32408556/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com