首页 > 解决方案 > ES5 Javascript 通过数组中的对象映射,然后按组更改对象键

问题描述

我有一个对象数组,我尝试在对象键中再添加一个单词,但是遇到问题,请检查我的数据并期望输出和我在下面尝试的代码:

试图得到这样的输出:

const data = [
  {
    'name_A': Joe,
    'year_A': 2019,
    'saving_A': 0,
    'member_A': false,
    'group:_A': "A"
  },
  {
    'name_B': Amy,
    'year_B': 2019,
    'saving_B': 0,
    'member_B': false,
    'group_B': "B"
  },
  {
    'name_C': Bob,
    'year_C': 2019,
    'saving_C': 0,
    'member_C': true,
    'group_C': "C"
  }
];

这是我的代码:

const data = [{
    name: 'Joe',
    year: 2019,
    saving: 0,
    member: false,
    group: "A"
  },
  {
    name: 'Amy',
    year: 2019,
    saving: 0,
    member: false,
    group: "B"
  },
  {
    name: 'Bob',
    year: 2019,
    saving: 0,
    member: true,
    group: "C"
  }
];
const filter = data.reduce((acc, key) => {
  const groupName = key.group;
  const obj = {};
  if (key.member === false) {
    const nodeId = key.nodeId + groupName;
    obj.nodeId = key.nodeId;
    obj.year = key.year;
    acc.push(obj);
  }
  return acc;
}, []);

console.log(filter)

谢谢您的帮助!

标签: javascriptecmascript-6

解决方案


您可以使用 reduce 来做到这一点:

const data = [
    {
      name: 'Joe',
      year: 2019,
      saving: 0,
      member: false,
      group: "A"
    },
    {
      name: 'Joe',
      year: 2019,
      saving: 0,
      member: false,
      group: "B"
    },
    {
      name: 'Joe',
      year: 2019,
      saving: 0,
      member: true,
      group: "C"
    }
  ];

  let result = data.map(el => {
      const group = el.group
      return Object.keys(el).reduce((a, i) => {
          a[`${i}_${group}`] = el[i]
          return a
      }, {})
  })

  console.log(result)


推荐阅读