簡體   English   中英

通過使用Javascript匹配元素將兩個數組合並為一個

[英]Combine two arrays into one by matching elements using Javascript

我有兩個數組。 一個是從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但這似乎並沒有使用鍵來找到匹配項。 我該怎么做?

您可以使用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) 

沒有解決此類問題的獨特方法。 如果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
    }
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM