ES5 Javascript通过数组中的对象进行映射,然后按组更改对象键

时间:2019-07-19 18:46:27

标签: javascript ecmascript-6

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

试图获得这样的输出:

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)

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可以利用Array.prototype.mapArray.prototype.reduce来解决此问题:

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 format = arr => arr.map(el => {
  return Object.keys(el).reduce((accum, key) => {
    accum[`${key}_${el.group}`] = el[key];
    return accum;
  }, {});
});

console.log(format(data));

答案 2 :(得分:0)

另一种选择是在功能map和功能reduce之间混合使用。

用于将当前对象转换为所需结构的功能map,以及用于将reduce与当前键连接起来的功能group

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"                          }                          ];
let result = data.map(({group, ...rest}) => Object.entries(rest).reduce((a, [k, v]) => Object.assign(a, {[`${k}_${group}`]: v}), {[`group_${group}`]: group}));

console.log(result);