问题描述
JS的数组匹配键码,对应上就把值填到default里面去,求大佬帮忙
问题出现的环境背景及自己尝试过哪些方法
const arr = Object.keys(total.data)
temp.item.map(item => {
arr.forEach(o => {
if(o == item['node_id']) {
const ts = total.data[item['node_id']]
const t = Object.keys(ts)
item['section'].map(it => {
t.forEach(is => {
if(is == it['id']) it['default'] = ts[is]
})
})
}
})
})
这是可以实现的,可是循环过多,数据量太大就会卡住,有更好的办法吗
相关代码
目标数组:
{
"cmd": "state",
"data": {
"Fan": {
"cc": 1,
"bb": 3,
"aa": 4
}
},
"time": 139634392
}
模板数据:
{
"item": [
{
"name": "group",
"node_id": "Fan",
"section": [
{
"dataType": {
"type": "int"
},
"default": 0,
"id": "aa",
"name": "nameaa"
},
{
"dataType": {
"type": "int"
},
"default": 0,
"id": "bb",
"name": "namebb"
},
{
"dataType": {
"type": "int"
},
"default": 0,
"id": "cc",
"name": "namecc"
}
]
}
]
}
你期待的结果是什么?实际看到的错误信息又是什么?
渴望得到的
{
"item": [
{
"name": "group",
"node_id": "Fan",
"section": [
{
"dataType": {
"type": "int"
},
"default": 4,
"id": "aa",
"name": "nameaa"
},
{
"dataType": {
"type": "int"
},
"default": 3,
"id": "bb",
"name": "namebb"
},
{
"dataType": {
"type": "int"
},
"default": 1,
"id": "cc",
"name": "namecc"
}
]
}
]
}
###试试这个方法,应该不是最优解,但是比你的方法可能好一点点
function test(value,template) {
let data = value.data;
template.item.forEach(node => {
let valueItem = data[node.node_id];
if (valueItem) {
node.section.forEach((s) => {
let defaultValue = valueItem[s.id];
if (defaultValue || defaultValue === 0) {
s['default'] = defaultValue;
}
});
}
});
return template;
}
改了一下,之前想多了