我有两个数组。一个是从API获取的,另一个是从firebase获取的。它们内部都有一个相似的密钥,即tld。如下所示。
API阵列
[
{
"tld" : "com",
"tld_type": 1,
},
"tld" : "org",
"tld_type" : 1,
}
]
Firebase阵列
[
{
"TLD" : "com",
"register_price" : 14.99
},
{
"TLD" : "org",
"register_price" : 15.99
}
]
我想将这两个数组合并为一个并像下面一样返回
[
{
"tld" : "com",
"tld_type" : 1,
"register_price" : 14.99
},
{
"tld" : "org",
"tld_type" : 1,
"register_price" : 15.99
}
]
我已经完成了一些Google搜索,发现了concact
,但这似乎并没有使用密钥来找到匹配项。我该怎么办?
答案 0 :(得分:1)
您可以使用map
创建一个新对象,其键和值将来自其他两个数组,并返回该对象。 map
将创建一个新的对象数组
let api = [{
"tld": "com",
"tld_type": 1,
},
{
"tld": "org",
"tld_type": 1,
}
]
let fb = [{
"TLD": "com",
"register_price": 14.99
},
{
"TLD": "org",
"register_price": 15.99
}
]
let k = api.map(function(item, index) {
let obj = {};
obj.tld = item.tld;
obj['tld_type'] = item['tld_type'];
obj['register_price'] = fb[index]['register_price']
return obj;
});
console.log(k)
答案 1 :(得分:0)
没有解决此类问题的独特方法。如果Firebase数组中存在register_price
属性,则必须遍历所有元素。在最短的时间内:
let combined = apiArray.map(ele=>{
let machedElement = fbArray.find(e => e.TLD === ele.tld)
if(machedElement != undefined) ele.register_price = machedElement.register_price
return ele
})
如果要合并所有属性,不仅要注册价格:
let combined = apiArray.map(ele=>{
let machedElement = fbArray.find(e => e.TLD === ele.tld)
if(machedElement != undefined) {
let mergedObject = Object.assign(ele, machedElement)
return mergedObject
}else{
return ele
}
})