通过使用Javascript匹配元素将两个数组合并为一个

时间:2018-09-24 00:06:28

标签: javascript arrays firebase

我有两个数组。一个是从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,但这似乎并没有使用密钥来找到匹配项。我该怎么办?

2 个答案:

答案 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
    }
})