我是javascript新手,我想使用不可变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"
}
}
}
})
我想创建三个表。第一个表将包含“ c1”和“ c2”值,因此在我阅读的文档中,我使用clients.keys()属性。
另一个表必须包含所有投资组合ID,例如:[“ e”,“ f”],最后一个表必须包含所有投资组合类型,例如:[“ cash”,“ margin”],但我不知道如何从文档中做到这一点。你知道如何?
最佳答案
我不确定一旦拥有数组就想做什么,因此在此示例中,我只是将它们显示在HTML标记中。但是,这应该向您展示如何创建要查找的每个阵列。第一步是使用Array.from(clients.keys());获取客户端ID的数组。呼叫。之后,您可以在client.getIn()调用中使用客户端ID,该调用将为每个客户端返回一个标准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 - 在不可变js中遍历嵌套 map ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42861525/