在JavaScript中删除forEach中的forEach
在我的代码中,我使用了两个forEach循环。但是为了优化我的代码,我被告知删除内部forEach。我被指示不要在forEach循环中使用forEach循环。 所以我不想在第二个数组obj3上循环。我只想得到某个位置的值。 这是我的密码:-在JavaScript中删除forEach中的forEach,javascript,arrays,foreach,Javascript,Arrays,Foreach,在我的代码中,我使用了两个forEach循环。但是为了优化我的代码,我被告知删除内部forEach。我被指示不要在forEach循环中使用forEach循环。 所以我不想在第二个数组obj3上循环。我只想得到某个位置的值。 这是我的密码:- var obj2 = [{ "name": "4134", "calls": [ ] }] var obj3 = [{ Channel: 'SIP/4134-0004462a', State: 'Up',
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键的值,那么它从obj3中提取Accountcode和State,并将它们推送到obj2的calls数组中。
以下是输出数组:-
[ {
"name": "4134",
"calls": [
{
"MobileNo": "7013658596",
"Status": "Up"
}
]
}]
有什么建议吗
如何解决这个问题?试试这个
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;
}, [])
试试这个
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;
}, [])
您能否提供一个示例,说明
obj2
和obj3
的结构,以及您希望结果是什么样的?此函数的输入和所需输出是什么?给予example@Phil请检查我的问题,您能否提供一个obj2
和obj3
的结构示例,以及您希望结果是什么样的?此函数的输入和期望输出是什么?给予example@Phil请检查我的问题我尝试了你的解决方案,但我看不到总执行时间有多大差异。执行时间将根据你正在测试的数据量而变化。嘿,这对我今天有所帮助,因为我使用的方法有时会给出错误的输出。如果(item.name==curVal.Channel.slice(4,8).toString())这部分解决了问题:)我尝试了你的解决方案,但总执行时间没有太大差异。执行时间将根据你测试的数据量而变化。嘿,这对我今天有所帮助,因为我使用的方法有时会给出错误的输出。如果(item.name==curVal.Channel.slice(4,8).toString())这部分解决了问题:)