簡體   English   中英

使用lodash將數組合並到對象

[英]Merge array to object, using lodash

我正在嘗試操縱對象的此示例數組。

var data = [
  { id: 'A1', name: 'Test', gender: 0, pet: 'dog', petname: 'huahua' },
  { id: 'A1', name: 'Test', gender: 0, pet: 'cat', petname: 'meo' },
  { id: 'A1', name: 'Test', gender: 0, pet: 'snake', petname: 'snakke' },
  { id: 'A1', name: 'Test', gender: 0, pet: 'lion', petname: 'growww' },
];

我需要做的就是像這樣將數組合並到一個對象

var data = [
  {
    id: 'A1', name: 'Test', gender: 0, pet: [
      { type: 'dog', petname: 'huahua' },
      { type: 'cat', petname: 'meo' },
      { type: 'snake', petname: 'snakke' },
      { type: 'lion', petname: 'growww' },
    ]
  },
];

使用lodash最簡單的方法是什么? 請幫我。

無需任何庫,只需使用reduce。

 var data= [ { id: 'A1', name: 'Test', gender: 0, pet: 'dog', petname: 'huahua'}, { id: 'A1', name: 'Test', gender: 0, pet: 'cat', petname: 'meo'}, { id: 'A1', name: 'Test', gender: 0, pet: 'snake', petname: 'snakke'}, { id: 'A1', name: 'Test', gender: 0, pet: 'lion', petname: 'growww'} ]; const results = data.reduce((results, current) => { const owner = results.find(o => o.id === current.id); if (owner) { owner.pet.push({ type: current.pet, petname: current.petname }); } else { results.push({id: current.id, name: current.name, gender: current.gender, pet: [{ type: current.pet, petname: current.petname }]}); } return results; }, []); console.log(results); 

您可以通過Array.reduce和ES6 destructuring以簡潔的方式執行此操作:

 var data= [ { id: 'A1', name: 'Test', gender: 0, pet: 'dog', petname: 'huahua'}, { id: 'A1', name: 'Test', gender: 0, pet: 'cat', petname: 'meo'}, { id: 'A1', name: 'Test', gender: 0, pet: 'snake', petname: 'snakke'}, { id: 'A1', name: 'Test', gender: 0, pet: 'lion', petname: 'growww'}, ]; const result = data.reduce((r, {id, name, gender, pet, petname}, i, a) => { r.pet.push({ type: pet, petname}) return i == a.length-1 ? {id, name, gender, pet: r.pet} : r }, { pet: []}) console.log(result) 

暫無
暫無

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

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