这是我的代码:

var obj2 = [{
  "name": "4134",
  "calls": [

  ]
}]

    var obj3 = [{ Channel: 'SIP/4134-0004462a',
        Accountcode: '7013658596'},
      { Channel: 'DAHDI-il-4134-sa',
        Accountcode: '07717754702',
      }]

var func = (obj2, obj3) => {
    obj2.forEach((a) =>
      obj3.forEach((b) => {
        if (b.Channel.includes(a.name)) a.calls = (a.calls || []).concat(Object.assign({}, { MobileNo: b.Accountcode}));

      })
    );
};

func(obj2, obj3);
console.log(JSON.stringify(obj2));


链接到我的JS-Fiddle
这是我当前的输出:

[
  {
    "name": "4134",
    "calls": [
      {
        "MobileNo": "7013658596"
      },
      {
        "MobileNo": "07717754702"
      }
    ]
  }
]


在上面的代码中,我有两个对象。在obj2中,名称键的值为4134。在我的代码中,我通过使用if 4134检查此obj3(b.Channel.includes(a.name))中的通道键的值中是否存在。我在这里使用了include函数。因此,如果obj3中Channel的值中存在4134,则在存在匹配项时,将Accountcode推送到obj2的calls数组中。如您所见,Channel中的一个是SIP/4134-0004462a,另一个是DAHDI-il-4134-sa。它们都包含4134,但是我只想比较其中Channel包含文本SIP的值。如您在上面的输出中看到的,由于两个通道都包含4134,因此来自obj3中两个对象的Accountcode被推送到obj2中的调用数组。这不是我想要的。

这是我想要的输出:

[
  {
    "name": "4134",
    "calls": [
      {
        "MobileNo": "7013658596"
      }
    ]
  }
]


在上面期望的输出中,4134仅与其中包含文本SIP的Channel匹配。
如何使用包含功能?

最佳答案

更改if (b.Channel.includes(a.name))...

if(b.Channel.includes(a.name) && b.Channel.match('SIP'))...

10-06 07:44