[英]Immutable JS map or list
假设我们有一个普通的javascript对象数组
[
{id : 1, name : "Hartford Whalers"},
{id : 2, name : "Toronto Maple Leafs"},
{id : 3, name : "New York Rangers"}
]
我们希望将其引入immutablejs。 将其放入地图或列表中是最自然的方法,我们将如何更新其中一个对象的属性? 说将“ Hartford Whalers”的名称更改为“ Carolina Hurricanes”。
您应该为此创建一个地图列表。 Immutable.js有一个函数Immutable.fromJS
将递归转换JS数组来Immutable.List
和JS对象Immutable.Map
。
var input = [
{id : 1, name : "Hartford Whalers"},
{id : 2, name : "Toronto Maple Leafs"},
{id : 3, name : "New York Rangers"}
];
var list = Immutable.fromJS(input);
list.toString(); // => "List [ Map { "id": 1, "name": "Hartford Whalers" }, Map { "id": 2, "name": "Toronto Maple Leafs" }, Map { "id": 3, "name": "New York Rangers" } ]"
您可以使用.setIn
设置第一项的名称:
var list2 = list.setIn([0, "name"], "Carolina Hurricanes");
list2.toString(); // => "List [ Map { "id": 1, "name": "Carolina Hurricanes" }, Map { "id": 2, "name": "Toronto Maple Leafs" }, Map { "id": 3, "name": "New York Rangers" } ]"
您可以将名称=“ Hartford Whalers”的任何项目的名称设置为“ Carolina Hurricanes”:
var list3 = list.map(function(item) {
if(item.get("name") == "Hartford Whalers") {
return item.set("name", "Carolina Hurricanes");
} else {
return item;
}
});
list3.toString(); // => "List [ Map { "id": 1, "name": "Carolina Hurricanes" }, Map { "id": 2, "name": "Toronto Maple Leafs" }, Map { "id": 3, "name": "New York Rangers" } ]"
我不同意。
您为数组的每个元素提供的示例是一个具有{ id }
属性的对象。 可以假设您将要通过其ID访问此数组的元素。 多数民众赞成在什么ID。
是的,本机结构是Maps
List
。 虽然你想要的是一个Map
的Maps
。
考虑一下检索{ id: 1928, "Some Team" }
所需要做的事情。 您必须在列表中进行一个接一个的迭代,直到找到匹配的ID。
一种更有效的方法是创建地图,这样您就可以直接“采摘”您的对象,例如
const input = Immutable.fromJS({
1: {id : 1, name : "Hartford Whalers"},
2: {id : 2, name : "Toronto Maple Leafs"},
3: {id : 3, name : "New York Rangers"},
// ...
1928: {id : 1928, name : "Some Team"},
});
然后访问它,您需要做的是:
const team = input.get('1928');
您需要进行初始转换,如果服务器端来自API(称为标准化),则需要进行该转换。 它还具有保存数据的好处。
这实际上是“地图”一词的来源
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.