【发布时间】:2018-09-21 18:36:51
【问题描述】:
在我的代码中,我使用了两个 forEach 循环。但是为了优化我的代码,我被指示不要在 forEach 循环中使用 forEach 循环。 所以我不想循环第二个数组 obj3。我只想在不使用内部 forEach 循环的情况下获取某个位置的值。 这是我的代码:-
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,如果 name 键的值存在于 Channel 键的值中,则它从 obj3 中选择 Accountcode 和 State 并将它们推送到 obj2 的调用数组中。 这是输出数组:-
[ {
"name": "4134",
"calls": [
{
"MobileNo": "7013658596",
"Status": "Up"
}
]
}]
到目前为止我做了什么
var func = (obj2, obj3) => {
var channelArr = [];
const Channels = obj3.reduce((acc, curVal) => {
obj2.forEach((item)=>{
if(curVal.Channel.includes(item.name)){
item.calls.push({'MobileNo':curVal.Accountcode,'Status': curVal.State})
}
})
return obj2;
}, [])
};
我尝试使用 reduce 函数来做这件事,但我真的不确定这是否可以提高性能。 如果您有更好的建议,请告诉我。
【问题讨论】:
-
通过索引访问数组,这样你就可以使用 for 迭代两个数组
-
如果
name存在于Channel中,它是否在可预测的位置 - 第一个正斜杠之后的数字? -
reduce与此处的forEach相同。您真正需要的是按名称查找表。 -
@Bergi 是的,我同意你的看法。
-
@CertainPerformance 是
标签: javascript performance optimization