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。然後它'SIP/4134-0004462a'
使用代碼檢查來自 obj2 的 4134 是否存在於來自 obj3 的值中curVal.Channel.includes('SIP') && item.name == curVal.Channel.slice(4,8).toString()
。如果然後該值存在它推動MobileNo
和AccountCode
從該特定對象,並推入OBJ2的呼叫陣列。因為Channel: 'SIP/4134-0004462a
在這裡是非常可預測的,好像值包含SIP
和slice(4,8)
位置然後4134
完美匹配。但是,如果不是4134
我必須匹配一個值"name" : "4134556"
怎麼辦?在這種情況下4134556
,'SIP/4134556-0004462a
如果我使用,它將無法正常工作slice(4,8)
在 obj3 上。我想要一個解決方案,它從 obj2 中獲取 name 鍵的值並從 obj3 中獲取 Channel 鍵的值,並檢查 obj2 中的值是否存在於從位置 4 開始的 Channel 值中(即在 SIP/ 之後)我不想要設置一個限制splice(4,8)
,而不是它應該是動態的,它可以匹配任何名稱的數字與從 Channel 值中的位置 4 開始的 Channel(期望像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
from obj3 也將與name : 4134
from obj2匹配,因為它在其他位置包含數字 4134 ,這不是所需的結果。
我該怎麼做才能使 obj2 的名稱與從第 4 個位置開始的 obj3 的 Channel 匹配,即之後SIP/
並檢查是否匹配?
您可以使用String.prototype.startsWith(searchString, position)
:
console.log('SIP/4134556-0004462a'.startsWith('4134556', 4)); // true
該position
參數允許指定要在大海撈針中搜索針的位置(在您的情況下 position 4
)。
這可能會給您帶來另一個問題,因為這也將評估為真:
'SIP/4134556-0004462a'.startsWith('4134', 4); // true
如果這不是您想要的(即您希望值後跟-
分隔符),則必須將分隔符添加到搜索字符串中:
'SIP/4134556-0004462a'.startsWith('4134' + '-', 4) // false
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句