Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中删除forEach中的forEach_Javascript_Arrays_Foreach - Fatal编程技术网

在JavaScript中删除forEach中的forEach

在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',

在我的代码中,我使用了两个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之间循环,如果通道键的值中存在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())这部分解决了问题:)