一起使用 reduce 和 sort (JavaScript)

如何解决一起使用 reduce 和 sort (JavaScript)

我有一个对象数组 (groceryArray),我想通过 groupId 属性(对象键)将它们组织成一个对象,最后通过 groupdisplayOrder 属性对这些键进行排序。请参阅 finalOutput 以获得所需的结果。

const groceryArray = [
    { id: 'apples',groupId: 'produce',groupdisplayOrder: 1 },{ id: 'chicken',groupId: 'meat',groupdisplayOrder: 3 },{ id: 'shrimp',groupId: 'seafood',groupdisplayOrder: 4 },{ id: 'milk',groupId: 'dairy',groupdisplayOrder: 2 },{ id: 'carrots',{ id: 'salmon',groupdisplayOrder: 4 }
]

想要的结果

const finalOutput = {
    produce: [{ id: 'apples',groupdisplayOrder: 1 }],dairy: [{ id: 'milk',groupdisplayOrder: 2 }],meat: [{ id: 'chicken',groupdisplayOrder: 3 }],seafood: [{ id: 'shrimp',groupdisplayOrder: 4 }]
}

这是我当前的代码......我想我可能做的步骤太多了。我想知道有没有办法同时减少和排序?

  const groceriesGroupedById = groceryArray.reduce((acc,cur) => {
    if (cur.groupId) {
      (acc[cur.groupId] || (acc[cur.groupId] = [])).push(cur)
    }
    return acc
  },{})

  const sortedGroupIds = Object.keys(groceriesGroupedById).sort((a,b) => {
    return groceriesGroupedById[a][0].groupdisplayOrder - groceriesGroupedById[b][0].groupdisplayOrder
  })

  const finalOutput = sortedGroupIds.reduce((acc,key) => ( acc[key] = groceriesGroupedById[key],acc ),{})

解决方法

首先使用Array.sort()对数组进行排序,然后使用Array.reduce()

const groceryArray = [
    { id: 'apples',groupId: 'produce',groupDisplayOrder: 1 },{ id: 'chicken',groupId: 'meat',groupDisplayOrder: 3 },{ id: 'shrimp',groupId: 'seafood',groupDisplayOrder: 4 },{ id: 'milk',groupId: 'dairy',groupDisplayOrder: 2 },{ id: 'carrots',{ id: 'salmon',groupDisplayOrder: 4 }
];

groceryArray.sort((a,b) => a.groupDisplayOrder - b.groupDisplayOrder);

const finalOutput = groceryArray.reduce((acc,cur) => {
  if (!acc[cur.groupId]) acc[cur.groupId] = [];
  acc[cur.groupId].push(cur);
  return acc;
},{});

console.log(finalOutput);

,

使用 MapArray#reduce,您可以对数据进行分组,然后遍历所有值并对其进行排序。

const 
  groceryArray=[{id:"apples",groupId:"produce",groupDisplayOrder:1},{id:"chicken",groupId:"meat",groupDisplayOrder:3},{id:"shrimp",groupId:"seafood",groupDisplayOrder:4},{id:"milk",groupId:"dairy",groupDisplayOrder:2},{id:"carrots",{id:"salmon",groupDisplayOrder:4}],res = groceryArray.reduce((r,o) => ((r[o.groupId] ??= []),r[o.groupId].push(o),r),{});

Object.values(res).forEach((o) => o.sort(({ groupDisplayOrder: a },{ groupDisplayOrder: b }) => a - b));

console.log(res);

,

您可以通过使用数组和 groupDisplayOrder 与对象以 groupId 作为键来采用嵌套方法。

最后将所有对象合并为一个对象。

const
    groceryArray = [{ id: 'apples',groupDisplayOrder: 4 }],result = Object.assign({},...groceryArray.reduce((r,o) => {
        ((r[o.groupDisplayOrder] ??= {})[o.groupId] ??= []).push(o);
        return r;
    },[]));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?