【问题标题】:Merge array to object, using lodash使用 lodash 将数组合并到对象
【发布时间】:2019-05-07 17:21:56
【问题描述】:

我正在尝试操作这个示例对象数组。

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 最简单的方法是什么?请帮帮我。

【问题讨论】:

    标签: javascript lodash


    【解决方案1】:

    不需要任何库,只需使用 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);

    【讨论】:

      【解决方案2】:

      您可以通过 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)

      【讨论】:

      • 我认为您不应该在答案中使用单字母参数,拼出参数对于帮助人们理解某些东西大有帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-07
      • 2016-12-31
      • 1970-01-01
      • 2016-06-12
      • 2018-08-07
      相关资源
      最近更新 更多