簡體   English   中英

過濾並分配 object 從一個數組到另一個 object

[英]Filter and assign object from an array to another object

我有特定的 object 需要從另一個數組中獲取,即hexCode

這是我正在過濾的數據

{
  dateCreated: "2019-10-30 08:29:54 PM" 

  hexCode: "#ed4c67"

  id: 1

  leaveTag: "Vacation Leave"

  leaveTagColor: "Bara Red"
}
{
  dateCreated: "2019-10-30 08:30:05 PM"

  hexCode: "#ea2027"
  
  id: 2

  leaveTag: "Sick Leave"
  
  leaveTagColor: "Red Pigment"
}

這是我要插入 hexCode 的數據。 並映射leaveType以將其與上面的數據進行比較。 這可能嗎?

{
  leaveType: "Emergency Leave"
  email: "sfe.bruce.logan@gmail.com"
  hexCode: ???
}
{
  leaveType: "Sick Leave"
  email: "sfe.bruce.logan@gmail.com"
  hexCode: ???
}

您可以簡單地進行如下查找,但在這種情況下時間復雜度更高(盡管可讀性更高且沒有空間復雜度)

或者,您可以從第一個數據數組創建一個 leaveType leaveType: hexCode類型的 Map,然后使用 Map 找到相應的值並填充第二個數組。 檢查@CodeManiac 對這種方法的回答。

 const data = [{ dateCreated: "2019-10-30 08:29:54 PM", hexCode: "#ed4c67", id: 1, leaveTag: "Vacation Leave", leaveTagColor: "Bara Red" }, { dateCreated: "2019-10-30 08:30:05 PM", hexCode: "#ea2027", id: 2, leaveTag: "Sick Leave", leaveTagColor: "Red Pigment" }] const arr = [{ leaveType: "Emergency Leave", email: "sfe.bruce.logan@gmail.com", }, { leaveType: "Sick Leave", email: "sfe.bruce.logan@gmail.com" }] arr.forEach(leave => { const matchedLeave = data.find(lv => lv.leaveTag === leave.leaveType); if(matchedLeave) { leave.hexCode = matchedLeave.hexCode; } }); console.log(arr);

您可以使用Mapmap

  • Map leaveTag到相應hexCode
  • 循環檢查數據,檢查leaveType中是否存在Map如果存在,則使用Map中的值,否則保留原始值

 const data = [{dateCreated: "2019-10-30 08:29:54 PM",hexCode: "#ed4c67",id: 1,leaveTag: "Vacation Leave",leaveTagColor: "Bara Red"}, {dateCreated: "2019-10-30 08:30:05 PM",hexCode: "#ea2027",id: 2,leaveTag: "Sick Leave",leaveTagColor: "Red Pigment",}] const desiredFormat = [{leaveType: "Emergency Leave",email: "sfe.bruce.logan@gmail.com",hexCode: ''}, {leaveType: "Sick Leave",email: "sfe.bruce.logan@gmail.com",hexCode: ''}] const mapper = new Map(data.map(({leaveTag,hexCode}) => [leaveTag, hexCode])) const final = desiredFormat.map(({ hexCode, ...rest }) => { return {...rest, hexCode: mapper.get(rest.leaveType) || hexCode } }) console.log(final)

我的方法只使用數組 map

 const obj1 = [{ dateCreated: "2019-10-30 08:29:54 PM", hexCode: "#ed4c67", id: 1, leaveTag: "Vacation Leave", leaveTagColor: "Bara Red" }, { dateCreated: "2019-10-30 08:30:05 PM", hexCode: "#ea2027", id: 2, leaveTag: "Sick Leave", leaveTagColor: "Red Pigment" }] const obj2 = [{ leaveType: "Emergency Leave", email: "sfe.bruce.logan@gmail.com", hexCode: null }, { leaveType: "Sick Leave", email: "sfe.bruce.logan@gmail.com", hexCode: null }] const result = obj2.map(item => { const findedHex = obj1.find(o2item => o2item.leaveTag == item.leaveType) item.hexCode = findedHex && findedHex.hexCode || null; return item; }) console.log(result)

暫無
暫無

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

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