簡體   English   中英

對包含對象數組的 Object 進行過濾和排序,同時保留空 Arrays

[英]Filter and Sort an Object Containing Array of Objects While Retaining Empty Arrays

我有一個 object 我想過濾,以便首先列出具有最多電動型 pokemon 的訓練師,但仍然存在沒有任何電動型 pokemon 的訓練師(表示為空數組)

這是我的 object:

obj = {
  trainer1: [ 
    { name: 'pikachu', type: 'electric', id: 25 },
    { name: 'zapdos', type: 'electric', id: 145 },
    { name: 'psyduck', type: 'water', id: 54 },
  ],
  trainer2: [
    { name: 'eevee', type: 'normal', id: 133 },
    { name: 'magmar', type: 'fire', id: 126 }
  ],
  trainer3: [
    { name: 'ditto', type: 'normal', id: 132 },
    { name: 'magnemite', type: 'electric', id: 81 }
  ]
}

變成這個object:

obj = {
  trainer1: [ 
    { name: 'pikachu', type: 'electric', id: 25 },
    { name: 'zapdos', type: 'electric', id: 145 }
  ],
  trainer3: [
     { name: 'magnemite', type: 'electric', id: 81 }
  ]
  trainer2: [] // Array still present, but empty
}

我知道reduce在這里會派上用場,但我不確定如何正確設置它。

這可能是蠻力解決方案,並且會有比這更好的解決方案,但我認為您可以按照以下方式進行操作。

const tempArr = Object.keys(obj).map(key=>{
  return {
     key:key,
     value:obj[key].filter(pokemon=>pokemon.type==='electric')
  }
})

let newObj = {}
tempArr.sort((a,b)=>b.value.length-a.value.length)

tempArr.forEach(item=>{
  newObj[item.key] = item.value
})

console.log(newObj)

暫無
暫無

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

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