这是我的代码:
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'))...