【发布时间】:2019-02-28 21:30:08
【问题描述】:
这是我的代码:
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 (b.Channel.includes(a.name)) 检查obj3 中Channel 键的值中是否存在4134。我在这里使用了包含功能。因此,如果 obj3 中 Channel 的值中存在 4134,那么当匹配时,Accountcode 将被推入obj2 的调用数组中。如您所见,频道之一是SIP/4134-0004462a,另一个是DAHDI-il-4134-sa。它们都包含 4134 但我只想比较 Channel 中包含文本 SIP 的值。正如您在上面的输出中看到的那样,obj3 中两个对象的 Accountcode 都被推送到 obj2 中的调用数组,因为两个通道都包含 4134。这不是我想要的。
这是我想要的输出:
[
{
"name": "4134",
"calls": [
{
"MobileNo": "7013658596"
}
]
}
]
在上述输出中,4134 仅与包含文本 SIP 的 Channel 匹配。 如何使用 include 函数?
【问题讨论】:
标签: javascript arrays sorting