循环遍历不可变js中的嵌套地图
Loop through a nested map in immutable js
我是 javascript 的新手,我想使用 immutable js 完成一项任务。
我有一张这样的地图:
const clients = Map({
"c1": {
"id": "c1",
"isLegalEntity": false,
"wantsEstatements": true,
"portfolios": {
"a": {
"id": "a",
"type": "Cash"
},
"b": {
"id": "b",
"type": "Margin"
}
}
},
"c2": {
"id": "c2",
"isLegalEntity": false,
"wantsEstatements": true,
"portfolios": {
"e": {
"id": "e",
"type": "Cash"
},
"f": {
"id": "f",
"type": "Margin"
}
}
}
})
我想创建三个 table。第一个 table 将包含 "c1" 和 "c2" 值,因此根据我阅读的文档,我使用 clients.keys() 属性。
另一个 table 必须包含所有投资组合 ID,如下所示:["e"、"f"],最后一个 table 必须包含所有投资组合类型,如下所示:["cash", "margin"] 但我不知道如何从文档中执行此操作。你知道怎么做吗?
我不确定您拥有数组后想要做什么,因此在本例中我只是将它们显示在 HTML 标记中。但是,这应该向您展示如何创建您要查找的每个数组。第一步是使用 Array.from(clients.keys()); 获取客户端 ID 数组;称呼。此后,您在 clients.getIn() 调用中使用客户端 ID,其中 returns 每个客户端的标准 javascript 对象。在此之后,您可以使用标准的 javascript 对象访问方法从客户端对象构建您想要的数组。
var clients = Immutable.Map({
"c1": {
"id": "c1",
"isLegalEntity": false,
"wantsEstatements": true,
"portfolios": {
"a": {
"id": "a",
"type": "Cash"
},
"b": {
"id": "b",
"type": "Margin"
}
}
},
"c2": {
"id": "c2",
"isLegalEntity": false,
"wantsEstatements": true,
"portfolios": {
"e": {
"id": "e",
"type": "Cash"
},
"f": {
"id": "f",
"type": "Margin"
}
}
}
});
function logArray(arr) {
var str = "[";
for (var i = 0; i < arr.length; i++) {
str += arr[i];
if (i < arr.length - 1) str += ",";
}
str += "]"
document.getElementById("info").innerHTML += str + "<br>";
}
var client_id_array = Array.from(clients.keys());
logArray(client_id_array);
for (var i = 0; i < client_id_array.length; i++) {
var obj = clients.getIn([client_id_array[i]]);
var portfolio_array = Object.keys(obj.portfolios);
logArray(portfolio_array);
var types = [];
for (j = 0; j < portfolio_array.length; j++) {
types[j] = obj.portfolios[portfolio_array[j]].type;
}
logArray(types);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.7.5/immutable.js"></script>
<div id="info"></div>
我是 javascript 的新手,我想使用 immutable js 完成一项任务。 我有一张这样的地图:
const clients = Map({
"c1": {
"id": "c1",
"isLegalEntity": false,
"wantsEstatements": true,
"portfolios": {
"a": {
"id": "a",
"type": "Cash"
},
"b": {
"id": "b",
"type": "Margin"
}
}
},
"c2": {
"id": "c2",
"isLegalEntity": false,
"wantsEstatements": true,
"portfolios": {
"e": {
"id": "e",
"type": "Cash"
},
"f": {
"id": "f",
"type": "Margin"
}
}
}
})
我想创建三个 table。第一个 table 将包含 "c1" 和 "c2" 值,因此根据我阅读的文档,我使用 clients.keys() 属性。 另一个 table 必须包含所有投资组合 ID,如下所示:["e"、"f"],最后一个 table 必须包含所有投资组合类型,如下所示:["cash", "margin"] 但我不知道如何从文档中执行此操作。你知道怎么做吗?
我不确定您拥有数组后想要做什么,因此在本例中我只是将它们显示在 HTML 标记中。但是,这应该向您展示如何创建您要查找的每个数组。第一步是使用 Array.from(clients.keys()); 获取客户端 ID 数组;称呼。此后,您在 clients.getIn() 调用中使用客户端 ID,其中 returns 每个客户端的标准 javascript 对象。在此之后,您可以使用标准的 javascript 对象访问方法从客户端对象构建您想要的数组。
var clients = Immutable.Map({
"c1": {
"id": "c1",
"isLegalEntity": false,
"wantsEstatements": true,
"portfolios": {
"a": {
"id": "a",
"type": "Cash"
},
"b": {
"id": "b",
"type": "Margin"
}
}
},
"c2": {
"id": "c2",
"isLegalEntity": false,
"wantsEstatements": true,
"portfolios": {
"e": {
"id": "e",
"type": "Cash"
},
"f": {
"id": "f",
"type": "Margin"
}
}
}
});
function logArray(arr) {
var str = "[";
for (var i = 0; i < arr.length; i++) {
str += arr[i];
if (i < arr.length - 1) str += ",";
}
str += "]"
document.getElementById("info").innerHTML += str + "<br>";
}
var client_id_array = Array.from(clients.keys());
logArray(client_id_array);
for (var i = 0; i < client_id_array.length; i++) {
var obj = clients.getIn([client_id_array[i]]);
var portfolio_array = Object.keys(obj.portfolios);
logArray(portfolio_array);
var types = [];
for (j = 0; j < portfolio_array.length; j++) {
types[j] = obj.portfolios[portfolio_array[j]].type;
}
logArray(types);
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.7.5/immutable.js"></script>
<div id="info"></div>