首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在reactjs中按值对对象数组进行分组

如何在reactjs中按值对对象数组进行分组
EN

Stack Overflow用户
提问于 2020-12-03 22:56:37
回答 2查看 1.5K关注 0票数 1

考虑到array

代码语言:javascript
运行
复制
const a1 = [
  { id: 1, nome: 'Ruan', status: { id: 1, posicao: 'goleiro' } },
  { id: 2, nome: 'Gleison', status: { id: 2, posicao: 'zagueiro' } },
  { id: 3, nome: 'Geraldo', status: { id: 2, posicao: 'zagueiro' } },
  { id: 4, nome: 'Heleno', status: { id: 3, posicao: 'atacante' } },
  { id: 5, nome: 'Djandel', status: { id: 3, posicao: 'atacante' } }
]

我尝试过使用reduce,但是没有成功,我尝试了下面的代码

代码语言:javascript
运行
复制
var groupBy = function(xs, key) {
  return xs.reduce(function(rv, x) {
    (rv[x[key]] = rv[x[key]] || []).push(x);
    return rv;
  }, {});
  groupBy(a1, 'status')
};

我也尝试过使用lodash

代码语言:javascript
运行
复制
_.groupBy(a1, 'status');

我希望有3个不同的arrays返回,一个是goleiros,另一个是zagueiros,还有一个是atacantes

如何在react视图中单独显示信息?

EN

Stack Overflow用户

回答已采纳

发布于 2020-12-03 23:05:55

可以这样使用group by:

代码语言:javascript
运行
复制
_.groupBy(a1, "status.posicao")

要指定您需要按status.posicao对它们进行分组,请查看此沙箱,它将返回一个包含三个组的对象。

https://codesandbox.io/s/strange-sanne-icdy3?file=/src/index.js

编辑:

如果你想构建你自己的函数而不使用lodash,并且假设你知道对象的形状,你可以构建类似这样的东西(我正在使用你的数组例子):

代码语言:javascript
运行
复制
const a1 = [
  { id: 1, nome: "Ruan", status: { id: 1, posicao: "goleiro" } },
  { id: 2, nome: "Gleison", status: { id: 2, posicao: "zagueiro" } },
  { id: 3, nome: "Geraldo", status: { id: 2, posicao: "zagueiro" } },
  { id: 4, nome: "Heleno", status: { id: 3, posicao: "atacante" } },
  { id: 5, nome: "Djandel", status: { id: 3, posicao: "atacante" } },
];

function groupBy(items) {
  return items.reduce((acc, curr) => {
    if (curr.status?.posicao) {
      const { posicao } = curr.status;
      const currentItems = acc[posicao];
  
      return { 
        ...acc,
        [posicao]: currentItems ? [...currentItems, curr] : [curr]
      };
    }
    return acc;
  }, {});
}

console.log(groupBy(a1))

票数 4
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65128398

复制
相关文章

相似问题

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