var obj2 = [{
"name": "4134",
"calls": [
]
}]
var obj3 = [{ Channel: 'SIP/4134-0004462a',
State: 'Up',
Accountcode: '7013658596'},
{ Channel: 'SIP/4334-sa',
State: 'Up',
Accountcode: '07717754702',
}]
var channelArr = [];
const Channels = obj3.reduce((acc, curVal) => {
obj2.forEach((item)=>{
if(curVal.Channel.includes('SIP') && item.name == curVal.Channel.slice(4,8).toString()){
item.calls.push({'MobileNo':curVal.Accountcode,'Status': curVal.State})
}
})
return obj2;
}, [])
console.log(obj2);
Вывод вышеуказанного кода:
[
{
"name": "4134",
"calls": [
{
"MobileNo": "7013658596",
"Status": "Up"
}
]
}
]
Мой код принимает "name": "4134"
от obj2 и Channel: 'SIP/4134-0004462a
от obj3.Затем он проверяет, существует ли 4134 из obj2 в значении 'SIP/4134-0004462a'
из obj3, используя код curVal.Channel.includes('SIP') && item.name == curVal.Channel.slice(4,8).toString()
.Если значение существует, то оно выталкивает MobileNo
и AccountCode
из этого конкретного объекта и помещает его в массив вызовов obj2.Так как Channel: 'SIP/4134-0004462a
здесь очень предсказуемо, как будто значение содержит SIP
и slice(4,8)
position, то 4134
идеально подходит.Но что, если вместо 4134
мне нужно сопоставить значение, например "name" : "4134556"
?В этом случае он не будет работать, так как 4134556
не будет совпадать с 'SIP/4134556-0004462a
, если я использую slice(4,8)
в obj3.Я хочу, чтобы решение было таким, что оно берет значение имени ключа от obj2 и берет значение ключа канала от obj3 и проверяет, существует ли значение от obj2 в значении канала, начиная с позиции 4 (т.е. после SIP /). Я не хочучтобы установить предел, например splice(4,8)
, вместо этого должно быть что-то динамическое, которое может сопоставить любую цифру имени с каналом, начиная с позиции 4 в значении канала (ожидая что-то вроде splice(start from 4th position and match the next digits for a match)
).Это позволит мне точно сопоставить числа, даже если они имеют любое количество цифр.
То, что я пробовал как временное решение:
if(curVal.Channel.includes('SIP') && curVal.Channel.includes(item.name))
, но это дает мне неверный результат при Channel : SIP/3422-0413462a
из obj3 также будет совпадать с name : 4134
из obj2, так как он содержит число 4134 в какой-то другой позиции, и это не желаемый результат.
Как мне сделать так, чтобы имя из obj2 соответствовало каналуobj3 начиная с 4-й позиции, т.е. после SIP/
, и проверьте, есть ли совпадение?