javascript - 按对象键减少/过滤对象数组

标签 javascript arrays dictionary object ecmascript-6

考虑以下对象数组

const data = [{
    name: 'James',
    sex: 'male',
  }, {
    name: 'Mike',
    sex: 'male',
  }, {
    name: 'Janet',
    sex: 'female',
  }, {
    name: 'Mary',
    sex: 'female',
}];

我想返回以下内容:

{
  males: [{
    name: 'James',
    sex: 'male',
  }, {
    name: 'Mike',
    sex: 'male',
  }]
  females: [{
    name: 'Janet',
    sex: 'female',
  }, {
    name: 'Mary',
    sex: 'female',
}]
}

我试过映射数组,按键选择对象,然后将它们添加到新数组,结果是两个数组。从那里开始,我不知道如何以简洁的方式将它们返回到新对象中。

我不太熟悉 ES6 中的数组过滤/归约方法,它们在这里有用吗?任何帮助表示赞赏!

最佳答案

你可以使用reduce

const data = [{
  name: 'James',
  sex: 'male',
}, {
  name: 'Mike',
  sex: 'male',
}, {
  name: 'Janet',
  sex: 'female',
}, {
  name: 'Mary',
  sex: 'female',
}];

const result = data.reduce((c, v) => {
  c[v.sex] = c[v.sex] || [];       //Initiate if key does not exist
  c[v.sex].push(v);                //Push the value
  return c;
}, {});

console.log(result);

如果你希望键是复数,你可以只添加's'

const result = data.reduce((c, v) => {
  let k = v.sex + 's';
  c[k] = c[k] || [];           //Initiate if key does not exist
  c[k].push(v);                //Push the value
  return c;
}, {});

关于javascript - 按对象键减少/过滤对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50270287/

相关文章:

javascript - 使用 javascript 更改 borderWidth 并包括位置偏移

c - 数组 a[i] 按降序打印,但我的逻辑是升序

python - 从 vars() 和 dict={} 创建的字典有什么区别?

ios - NSInvalidArgumentException isKindOfClass

javascript - 将内容放入带有 class 的 div 中

javascript - 在 Chrome 控制台中使用 javascript 制作 Google 应用

javascript - 动态 json 回调函数仅检索最后一个值

javascript - 如何在React Native中创建具有x y坐标的动态数组

c++ - 如何将结构数组写入二进制文件并再次读取?

c# - 创建由数据库驱动的对象来填充 TreeView - 非常慢