【问题标题】:modify array of objects - javascript修改对象数组 - javascript
【发布时间】:2020-01-12 14:50:47
【问题描述】:

我有一个这样的对象数组。

[
    {KEY1: "VALUE1", NAME: "VALUE2", PID: "VALUE36"}
    {KEY11: "VALUE1", NAME: "VALUE2", PID: "VALUE47"}
    {KEY11: "VALUE1", NAME: "VALUE4", PID: "VALUE49"}
    {KEY11: "VALUE1", NAME: "VALUE4", PID: "VALUE43"}
]

我需要这样的数据结构。因此,基本上具有重复名称的key NAME 将成为新数据结构中的关键。而key PID 将是它在数组中的值。

[
   { VALUE2: [VALUE36, VALUE47] },
   { VALUE4: [VALUE49, VALUE43] },
]

【问题讨论】:

  • 你尝试过什么,它到底有什么问题?
  • 你有什么问题?
  • @jonrsharpe 已修改。
  • ...同样的问题
  • 您尝试解决此问题的代码在哪里?

标签: javascript


【解决方案1】:

这样的聚合由Array.reduce() 处理。例如:

const arr = [
  {KEY1: "VALUE1", NAME: "VALUE2", PID: "VALUE36"},
  {KEY11: "VALUE1", NAME: "VALUE2", PID: "VALUE47"},
  {KEY11: "VALUE1", NAME: "VALUE4", PID: "VALUE49"},
  {KEY11: "VALUE1", NAME: "VALUE4", PID: "VALUE43"},
]

// Objects are basically associative arrays in JS, so...
// (For each item in arr, add or update an array at obj[item.NAME])
const obj = arr.reduce((obj, item) => {
  const val = [ item.PID ]
  obj[item.NAME] = Array.isArray(obj[item.NAME])
    ? obj[item.NAME].concat(val)
    : val
  return obj
}, {}) // start with obj = {}

/*
At this point, we have
obj = {
  "VALUE2": [
    "VALUE36",
    "VALUE47"
  ],
  "VALUE4": [
    "VALUE49",
    "VALUE43"
  ]
}
*/

// ...but since you specified separate objects, this finishes it off
const newArr = Object.entries(obj).map(([key, val]) => ({ [key]: val }))
console.log(newArr)

【讨论】:

【解决方案2】:
const a = [
    {KEY1: "VALUE1", NAME: "VALUE2", PID: "VALUE36"},
    {KEY11: "VALUE1", NAME: "VALUE2", PID: "VALUE47"},
    {KEY11: "VALUE1", NAME: "VALUE4", PID: "VALUE49"},
    {KEY11: "VALUE1", NAME: "VALUE4", PID: "VALUE43"},
];

var b = [];
a.forEach(function(element) {
  if (b[element['NAME']] === undefined) {
    b[element['NAME']] = [];
  }
  b[element['NAME']].push(element['PID']);
});

console.log(b);

输出:

[ VALUE2: [ 'VALUE36', 'VALUE47' ], VALUE4: [ 'VALUE49', 'VALUE43' ] ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 2019-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多