【问题标题】:Merge objects with same value from an array into a new object将数组中具有相同值的对象合并到一个新对象中
【发布时间】:2021-04-09 23:43:29
【问题描述】:

我有一个对象数组

let array = [
  {
    "Reg_No": 201500445,
    "Name": "ADITYA KUMAR ",
    "ELECTIVE": "Advanced Web Technologies"
  },
  {
    "Reg_No": 201700150,
    "Name": "N. GAGAN SAI REDDY",
    "ELECTIVE": "Advanced Java"
  },
  {
    "Reg_No": 201700150,
    "Name": "N. GAGAN SAI REDDY",
    "ELECTIVE": "Digital Image Processing"
  },
  {
    "Reg_No": 201700150,
    "Name": "N. GAGAN SAI REDDY",
    "ELECTIVE": "Enterprise Resource Planning"
  },
  {
    "Reg_No": 201700181,
    "Name": "RANJAN SENGUPTA",
    "ELECTIVE": "Advanced Java"
  },
  {
    "Reg_No": 201700181,
    "Name": "RANJAN SENGUPTA",
    "ELECTIVE": "Digital Image Processing"
  },
  {
    "Reg_No": 201700181,
    "Name": "RANJAN SENGUPTA",
    "ELECTIVE": "Internet, Technology and Society"
  },
  {
    "Reg_No": 201700432,
    "Name": "SAMRAT HALDAR",
    "ELECTIVE": "Advanced Java"
  }
]

我希望将具有相同 Reg_No 的对象合并到一个对象中,同时创建一个属性来保存所有 ELECTIVE 的值 即我想要类似的东西

{
  "Reg_No": 201700150,
  "Name": "N. GAGAN SAI REDDY",
  "ELECTIVE": [
    "Advanced Java",
    "Digital Image Processing",
    "Enterprise Resource Planning"
  ]
}

对于数组中具有相同 Reg_No 的每个对象。 我尝试使用 lodash,但我不知道如何将 Elective 合并到一个数组中。 我试过了

var result = _(array)
  .groupBy('id')
  .map(_.spread(_.assign))
  .value();

但它只会保留其中一个 ELECTIVE 科目。有没有办法将所有 ELECTIVE 存储在该对象的一个​​数组中。

【问题讨论】:

  • 您搜索了什么,找到了什么?你尝试了什么,它是如何失败的?
  • 请添加您尝试过的代码。
  • 我搜索了如何在数组中合并具有相同值的对象,我得到了 const result = _6th_raw_final.filter(v => { return v.Reg_No ? !Object.assign(v.Reg_No) : v.Reg_No = v }, {});。但它返回一个空数组

标签: javascript node.js


【解决方案1】:

你可以使用reduce -

const array = [{
  Reg_No: 201500445,
  Name: 'ADITYA KUMAR ',
  ELECTIVE: 'Advanced Web Technologies'
}, {
  Reg_No: 201700150,
  Name: 'N. GAGAN SAI REDDY',
  ELECTIVE: 'Advanced Java'
}, {
  Reg_No: 201700150,
  Name: 'N. GAGAN SAI REDDY',
  ELECTIVE: 'Digital Image Processing'
}, {
  Reg_No: 201700150,
  Name: 'N. GAGAN SAI REDDY',
  ELECTIVE: 'Enterprise Resource Planning'
}, {
  Reg_No: 201700181,
  Name: 'RANJAN SENGUPTA',
  ELECTIVE: 'Advanced Java'
}, {
  Reg_No: 201700181,
  Name: 'RANJAN SENGUPTA',
  ELECTIVE: 'Digital Image Processing'
}, {
  Reg_No: 201700181,
  Name: 'RANJAN SENGUPTA',
  ELECTIVE: 'Internet, Technology and Society'
}, {
  Reg_No: 201700432,
  Name: 'SAMRAT HALDAR',
  ELECTIVE: 'Advanced Java'
}];

var reducedSet = [];
array.reduce((accumulator, currentValue) => {
  const existing = accumulator.find(a => a.Reg_No === currentValue.Reg_No);
  if (existing) {
    existing.ELECTIVE.push(currentValue.ELECTIVE);
  } else {
    currentValue.ELECTIVE = [currentValue.ELECTIVE]
    accumulator.push(currentValue)
  }
  return accumulator;
}, reducedSet);

console.log(reducedSet);

【讨论】:

  • 谢谢你……尽管我不知道你做了什么……
猜你喜欢
  • 2017-10-29
  • 2020-02-08
  • 1970-01-01
  • 2020-09-18
  • 2021-10-16
  • 2017-06-24
  • 2018-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多