【问题标题】:Combine two arrays into one by matching elements using Javascript通过使用 Javascript 匹配元素将两个数组合二为一
【发布时间】:2018-09-24 00:06:27
【问题描述】:

我有两个数组。一个从 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
    }
]

我进行了一些谷歌搜索并找到了concact,但这似乎没有使用密钥来查找匹配项。我该怎么做?

【问题讨论】:

    标签: javascript arrays firebase


    【解决方案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)

    【讨论】:

    • 太棒了!我看到的唯一问题是两个数组中的两个索引都不相同??
    【解决方案2】:

    没有解决此类问题的独特方法。如果该属性存在于 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
    })
    

    如果您想合并所有属性,而不仅仅是 register_price:

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

    【讨论】:

    • 如果我只想从两个数组中取出所有元素并合并它们怎么办?比如,不声明ele.register_price,只是将它们推到一起?
    猜你喜欢
    • 2013-07-05
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 2022-11-02
    • 2014-08-02
    • 2020-04-30
    • 1970-01-01
    • 2018-09-08
    相关资源
    最近更新 更多