[英]JavaScript compare two arrays and push items to the first array that have the same property value in the second array
I have two arrays and want to push the values from the second array having the same property value.我有两个 arrays 并想从具有相同属性值的第二个数组中推送值。 Comparing the values by using addrSeq
property and push the matching object in to vpainfo
array使用addrSeq
属性比较值并将匹配的 object 推送到vpainfo
数组
Below are the sample JSON structure,以下是示例 JSON 结构,
Array1 :阵列 1 :
[
{
"addrSeq": "12",
"accountMask": "********7479",
"vpainfo": []
},
{
"addrSeq": "13",
"accountMask": "********74",
"vpainfo": []
}
]
Array2:阵列 2:
[
{
"addrSeq": "12",
"vpa": "saasasa@fff"
},
{
"addrSeq": "12",
"vpa": "xyz@com"
},
{
"addrSeq": "13",
"vpa": "saas@ddd"
}
]
you just need to learn javascript, here is result please look into this i just store both into array, and then run loop and match and push into one.你只需要学习 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);
You can achieve it via simple forEach
loop.您可以通过简单的forEach
循环来实现它。
Demo:演示:
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);
Assuming that the OP requires Array1
to be updated such that each object's vpaIinfo
array gets updated based on the data in Array2
, the following solution may be one possible way to achieve the desired objective.假设 OP 需要更新Array1
以便每个对象的vpaIinfo
数组根据Array2
中的数据进行更新,以下解决方案可能是实现预期目标的一种可能方法。
Code Snippet代码片段
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));
Explanation解释
.map()
使用.map()
遍历 array-1vpainfo
对于每个 object,保持道具的 rest 不变并仅操作vpainfo
vpainfo
(using ...obj.vpainfo
)保留当前vpainfo
中的任何现有值(使用...obj.vpainfo
)vpa
found in array-2 Append 到此,array-2 中找到的任何相关vpa
.filter()
to retain only those with same addrSeq
-AND- then, using .map()
to extract just the vpa
prop (using de-structuring)以上是通过使用.filter()
只保留那些具有相同addrSeq
然后,使用.map()
只提取vpa
道具(使用解构)来完成的Logic逻辑
addrSeq
values.通过比较addrSeq
值从第二个数组中找到匹配项。vpainfo
of item in first array as the concatenated value of vpa
s from second array.将第一个数组中 item 的vpainfo
更新为第二个数组中vpa
的连接值。Working Fiddle工作小提琴
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.