Вот мой код:
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. В моем коде я проверяю, существует ли это 4134
в значении ключа канала в obj3
, используя if (b.Channel.includes(a.name))
.Я использовал функцию include здесь.Таким образом, если 4134 существует в значении Channel в obj3, то Accountcode
помещается в массив вызовов obj2
, когда есть совпадение.Как видите, один из каналов - SIP/4134-0004462a
, а другой - DAHDI-il-4134-sa
.Оба они содержат 4134, но я хочу сравнить только те значения, в которых канал содержит текст SIP.Как видно из вышеприведенного вывода, код учетной записи из обоих объектов в obj3
помещается в массив вызовов в obj2
, поскольку оба канала содержат 4134. Это не то, что я хочу.
Вот желаемый вывод, который я хочу:
[
{
"name": "4134",
"calls": [
{
"MobileNo": "7013658596"
}
]
}
]
В вышеуказанном выводе 4134 сопоставляется только с каналом, содержащим текст SIP в нем.Как мне это сделать с помощью функции include?