我有兩個陣列,想從具有相同屬性值的第二個陣列中推送值。使用addrSeq屬性比較值并將匹配的物件推入vpainfo陣列
下面是示例 JSON 結構,
陣列1:
[
{
"addrSeq": "12",
"accountMask": "********7479",
"vpainfo": []
},
{
"addrSeq": "13",
"accountMask": "********74",
"vpainfo": []
}
]
陣列2:
[
{
"addrSeq": "12",
"vpa": "saasasa@fff"
},
{
"addrSeq": "12",
"vpa": "xyz@com"
},
{
"addrSeq": "13",
"vpa": "saas@ddd"
}
]
uj5u.com熱心網友回復:
你只需要學習 javascript,這里是結果請查看這個我只是將兩者都存盤到陣列中,然后運行回圈并匹配并推入一個。
let firstarray =[
{
"addrSeq": "12",
"accountMask": "********7479",
"vpainfo": []
},
{
"addrSeq": "13",
"accountMask": "********74",
"vpainfo": []
}
]
let secondarray = [
{
"addrSeq": "12",
"vpa": "saasasa@fff"
},
{
"addrSeq": "12",
"vpa": "xyz@com"
},
{
"addrSeq": "13",
"vpa": "saas@ddd"
}
]
// merge both array into one using addrSeq match value
let mergedarray = firstarray.map(function(item) {
secondarray.map(function(item2) {
if (item.addrSeq == item2.addrSeq) {
item.vpainfo.push(item2);
}
});
return item;
});
console.log(mergedarray);
uj5u.com熱心網友回復:
您可以通過簡單的forEach回圈來實作它。
演示:
const array1 = [
{
"addrSeq": "12",
"accountMask": "********7479",
"vpainfo": []
},
{
"addrSeq": "13",
"accountMask": "********74",
"vpainfo": []
}
];
const array2 = [
{
"addrSeq": "12",
"vpa": "saasasa@fff"
},
{
"addrSeq": "12",
"vpa": "xyz@com"
},
{
"addrSeq": "13",
"vpa": "saas@ddd"
}
];
array2.forEach((obj) => {
array1.forEach((array1Obj) => {
if (obj.addrSeq === array1Obj.addrSeq) {
array1Obj.vpainfo.push(obj.vpa)
}
});
});
console.log(array1);
uj5u.com熱心網友回復:
假設需要Array1更新 OP,以便每個物件的vpaIinfo陣列根據 中的資料進行更新Array2,則以下解決方案可能是實作所需目標的一種可能方式。
代碼片段
const getUpdatedArr = (ar1, ar2) => (
ar1.map(
obj => ({
...obj,
vpainfo: [
...obj.vpainfo,
...ar2.filter(
({addrSeq}) => (obj.addrSeq === addrSeq)
).map(
({vpa}) => vpa
)
]
})
)
);
const arr1 = [
{
"addrSeq": "12",
"accountMask": "********7479",
"vpainfo": []
},
{
"addrSeq": "13",
"accountMask": "********74",
"vpainfo": []
}
];
const arr2 = [
{
"addrSeq": "12",
"vpa": "saasasa@fff"
},
{
"addrSeq": "12",
"vpa": "xyz@com"
},
{
"addrSeq": "13",
"vpa": "saas@ddd"
}
];
console.log(getUpdatedArr(arr1, arr2));
解釋
- 使用遍歷 array-1
.map() - 對于每個物件,保持其余道具原樣并僅操作
vpainfo - 保留當前的任何現有值
vpainfo(使用...obj.vpainfo) - 附加到這個,
vpa在 array-2 中找到的任何相關 - 以上是通過使用
.filter()僅保留具有相同addrSeq-AND- 的那些,然后使用.map()僅提取vpa道具(使用解構)來完成的
uj5u.com熱心網友回復:
可能的一個班輪使用map和filter
let array1 = [{"addrSeq": "12","accountMask": "********7479","vpainfo": []},{"addrSeq": "13","accountMask": "********74","vpainfo": []}];
const array2 = [ { "addrSeq": "12", "vpa": "saasasa@fff" }, { "addrSeq": "12", "vpa": "xyz@com" }, { "addrSeq": "13", "vpa": "saas@ddd" }];
array1 = array1.map(({addrSeq,accountMask}) => ({addrSeq,accountMask,vpainfo: array2.filter((e) => e.addrSeq === addrSeq)}))
console.log(array1)
uj5u.com熱心網友回復:
邏輯
- 回圈第一個陣列
addrSeq通過比較值從第二個陣列中找到匹配項。- 將第一個陣列中的專案更新為第二個陣列中 s
vpainfo的串聯值。vpa
作業小提琴
const arr1 = [
{ "addrSeq": "12", "accountMask": "********7479", "vpainfo": [] },
{ "addrSeq": "13", "accountMask": "********74", "vpainfo": [] }
]
const arr2 = [
{ "addrSeq": "12", "vpa": "saasasa@fff" },
{ "addrSeq": "12", "vpa": "xyz@com" },
{ "addrSeq": "13", "vpa": "saas@ddd" }
]
arr1.forEach((node) => node.vpainfo = node.vpainfo.concat(arr2.filter(item => item.addrSeq === node.addrSeq).map(item => item.vpa)))
console.log(arr1);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/454363.html
標籤:javascript 数组
