首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回一个新的对象数组,这些对象具有相同的值,按qauntity/length分组

返回一个新的对象数组,这些对象具有相同的值,按qauntity/length分组
EN

Stack Overflow用户
提问于 2020-12-11 01:15:24
回答 2查看 29关注 0票数 0

所以我现在有一个像这样的数组:

代码语言:javascript
复制
const allMeats = ['Bacon','Bacon','Bacon', 'Steak', 'Lettuce', 'Cabbage','Cabbage','Cabbage','Steak', 'Veal']

我想要改变数组,使其成为一个对象数组,具有确定重复项的值的键/值。

目前我有

代码语言:javascript
复制
const meatsGrouped = allMeats.reduce(
    (acum, cur) => Object.assign(acum, { [cur]: (acum[cur] || 0) + 1 }),
    [],
  );

然而,这段代码将数组转换为this:[Bacon: 3, Steak: 2, Lettuce: 1, Cabbage: 3, Veal: 1],而我希望它看起来像这样:[{Bacon: 3}, {Steak: 2}, {Lettuce: 1}, {Cabbage: 3}, {Veal: 1}]

any1能告诉我我做错了什么吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-12-11 01:21:36

您可以使用reduce和map方法来完成此操作。

代码语言:javascript
复制
const allMeats = [
  'Bacon',
  'Bacon',
  'Bacon',
  'Steak',
  'Lettuce',
  'Cabbage',
  'Cabbage',
  'Cabbage',
  'Steak',
  'Veal',
];

const ret = Object.entries(
  allMeats.reduce((prev, c) => {
    const p = prev;
    const key = c;
    p[key] = p[key] ?? 0;
    p[key] += 1;
    return p;
  }, {})
).map(([x, y]) => ({ [x]: y }));
console.log(ret);

票数 3
EN

Stack Overflow用户

发布于 2020-12-11 01:19:50

您可以使用reduce方法执行以下操作:

代码语言:javascript
复制
let allMeats = ['Bacon','Bacon','Bacon', 'Steak', 'Lettuce', 'Cabbage','Cabbage','Cabbage','Steak', 'Veal'];
let res = allMeats.reduce((prev, curr) => {
  const index = prev.findIndex(item => item.hasOwnProperty(curr));
  if(index > -1) {
    prev[index][curr]++;
  }else {
    prev.push({[curr]: 1});
  }
  return prev;
}, []);
console.log(res);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65239151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档