在我的代码中,我使用了两个forEach循环。但是为了优化代码,我被告知删除内部的forEach。我被指示不要在forEach循环内使用forEach循环。 所以我不想遍历第二个数组obj3。我只想在某个位置获取值。 这是我的代码:-
var obj2 = [{
"name": "4134",
"calls": [
]
}]
var obj3 = [{ Channel: 'SIP/4134-0004462a',
State: 'Up',
Accountcode: '7013658596'},
{ Channel: 'SIP/4334-sa',
State: 'Up',
Accountcode: '07717754702',
}]
var function = (obj2, obj3) => {
obj2.forEach((a) =>
obj3.forEach((b) => {
if (b.Channel.includes(a.name)) a.calls = (a.calls || []).concat(Object.assign({}, { MobileNo: b.Accountcode, Status : b.State}));
})
);
};
function(obj2, obj3);
上面的代码循环遍历obj2和obj3,如果在Channel密钥的值中存在名称密钥的值,则它将从obj3中选择Accountcode和State并将它们推入obj2的calls数组中。 这是输出数组:-
[ {
"name": "4134",
"calls": [
{
"MobileNo": "7013658596",
"Status": "Up"
}
]
}]
关于的任何建议 该如何解决?
答案 0 :(得分:2)
尝试一下
var channelArr = [];
const Channels = obj3.reduce((acc, curVal) => {
obj2.forEach((item)=>{
if(item.name == curVal.Channel.slice(4,8).toString()){
item.calls.push({'MobileNo':curVal.Accountcode,'Status': curVal.State})
}
})
return obj2;
}, [])