不可变的JS映射或列表
Immutable JS map or list
假设我们有一个对象的纯javascript数组
[
{id : 1, name : "Hartford Whalers"},
{id : 2, name : "Toronto Maple Leafs"},
{id : 3, name : "New York Rangers"}
]
我们想把它引入immutablejs。将其制成地图或列表是最自然的吗?我们将如何更新其中一个对象中的属性?把"哈特福德捕鲸者"的名字改成"卡罗莱纳飓风"。
您应该为此创建一个映射列表。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" } ]"
您可以将name="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
。尽管你想要的是Maps
中的Map
。
为什么
想想你需要做些什么来检索{ 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,则在服务器端进行转换,称为规范化。它还有保存数据的好处。
这实际上是术语";地图";来自
相关文章:
- Immutablejs:将列表转换为映射
- 不可变的JS映射或列表
- 映射下拉列表选择到URL
- 数百万个列表映射,100GB数据流畅显示,建议
- 如何将输入映射到我的数据列表选项
- 复选框列表 将数组格式化为 JSON 并在 ng-repeat 中映射后未填充
- 使用 Jquery 将 SelectListItems 的 JSON 列表映射到下拉列表 Select List 并指示
- 下划线.js:使用对象中找到的键从对象列表中创建映射
- 使用不可变 JS 更新映射列表中的一个键
- 将数组中的项列表映射到函数参数
- 谷歌将DistanceMatrix映射到源-目的地对列表的存储结果
- 在angularjs中从逗号分隔的字符串列表中分割和映射数组
- 列表中的Json值<映射<字符串,对象>>在javascript emberjs中
- 在不删除未列出项目的情况下,将多个源的映射删除到单个列表中
- 通过对象列表将 ID 数组映射到字符串数组
- 使用对象中的键从对象列表中创建映射
- 如何在JavaScript中创建带有键和值列表的映射
- 在ReactJS上使用Lodash对映射列表进行排序
- 在javascript中以列表形式从映射中生成值对
- 如何将json数组元素映射到下拉列表中选择的选项