在JavaScript中删除forEach内部的forEach

时间:2018-09-21 05:19:51

标签: javascript arrays foreach

在我的代码中,我使用了两个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"
    }
  ]
}]

关于的任何建议 该如何解决?

1 个答案:

答案 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;
}, [])