【问题标题】:Retrieve nested object into array in es6 or lodash将嵌套对象检索到 es6 或 lodash 中的数组中
【发布时间】:2020-06-01 21:48:02
【问题描述】:

我正在尝试将相同键的嵌套对象从对象数组中提取到数组中。

例子:

有一个数组如下图:

[
 {
  id:1,
  model:'car',
  manufacturer:{
   id:1,
   name:'benz',
   year:2010
  }
 },
 {
  id:1,
  model:'car',
  manufacturer:{
   id:2,
   name:'benz',
   year:2012
  }
 },
 {
  id:2,
  model:'bus',
  manufacturer:{
   id:3,
   name:'volvo',
   year:2020
  }
 }
]

我需要如下所示的结果:

[
 {
   id:1,
   model:'car',
   manufacturer:[
    {
     id:1,
     name:'benz',
     year:2010
    },
    {
     id:2,
     name:'benz',
     year:2012
    }
   ]
 },
 {
  id:2,
  model:'bus',
  manufacturer:{
   id:3,
   name:'volvo',
   year:2020
  }
 }
]

如何做到这一点?我使用 lodash 尝试了所有可能的方法,但无法获得所需的结果。请帮我。谢谢。

【问题讨论】:

  • 您是否尝试过使用Array.prototype.reduce
  • 试过但没用
  • 发布您的代码,以便我们帮助您找出问题所在。
  • @fubar 我没有办法,所以我正在寻找是否有人可以提供解决方案。

标签: javascript arrays object ecmascript-6 lodash


【解决方案1】:

let data =[
 {
  id:1,
  model:'car',
  manufacturer:{
   id:1,
   name:'benz',
   year:2010
  }
 },
 {
  id:1,
  model:'car',
  manufacturer:{
   id:2,
   name:'benz',
   year:2012
  }
 },
 {
  id:2,
  model:'bus',
  manufacturer:{
   id:3,
   name:'volvo',
   year:2020
  }
 }
]   

   let temp=[];
    for(var  i=0;i<=data.length-1;i++){
      let pos = temp.findIndex(el=>el.id==data[i]['id']);
      if(pos == -1){
        temp.push(data[i]);
      }else{
       let obj = temp[pos]['manufacturer'];
       temp[pos]['manufacturer'] = Array.isArray(obj) ? [...obj,data[i]['manufacturer']] : [obj,data[i]['manufacturer']]
      }
    }

console.log(temp) 

 

【讨论】:

    【解决方案2】:

    你可以用简单的 for 循环来做

    for(let i=0;i<arr.length;i++)) {
    // check required key matching
    // append to new array
    }
    

    【讨论】:

    • 我投了反对票,因为您的原始回复根本没有回答这个问题。您最近的编辑也没有提供全面的答案。
    猜你喜欢
    • 2017-01-20
    • 2019-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多