react-native - 根据唯一 ID 将 json 对象分组到数组中
问题描述
例如这是我得到的 json.Json 组这个
var data = [{
orderid: 1,
ordername:ordername1,
productcode: 1,
productname: product1,
productquantity: 10
},
{
orderid: 2,
ordername:ordername2,
productcode: 2,
productname: product2,
productquantity: 11
},
{
orderid: 1,
ordername:ordername3,
productcode: 3,
productname: product3,
productquantiy: 45
}
]
预期产出
[
{
orderid: 1,
ordername:ordername1,
products: [
{
productcode: 1,
productname: product1,
productquantity: 10
},
{
productcode: 3,
productname: product3,
productquantity: 45
}]
},
{
orderid: 2,
ordername:ordername2,
products: [
{
productid: 2,
productname: product2,
productquantity: 11
}]
}]
如何在本机反应中做到这一点。如何根据 orderid 对其进行分组。现在我也添加了 ordername 所以如何也包含它
解决方案
使用很容易实现Array.reduce
var data = [{
orderid: 1,
ordername: 'ordername1',
productcode: 1,
productname: 'product1',
productquantity: 10
},
{
orderid: 2,
ordername: 'ordername2',
productcode: 2,
productname: 'product2',
productquantity: 11
},
{
orderid: 1,
ordername: 'ordername3',
productcode: 3,
productname: 'product3',
productquantity: 45
}
];
// reduce iterates over each item, using accumulator
var orderedData = data.reduce((acc, next) => {
// reusable product var
var nextProduct = {
productcode: next.productcode,
productname: next.productname,
productquantiy: next.productquantity
}
// find similar orders, and join them
var exist = acc.find(v => v.orderid === next.orderid);
if (exist) {
// order exists, update its products
exist.products.push(nextProduct);
} else {
// create new order
acc.push({
orderid: next.orderid,
ordername: next.ordername,
products: [nextProduct]
})
}
return acc
}, [])
console.log(orderedData)
推荐阅读
- reactjs - 如何编写依赖于 React 中 useState 钩子的条件渲染组件的测试?
- delphi - Datasnap 获取 10054 - 套接字错误 #10054 连接被对等方重置。在 TDBXCommand.Prepare 中
- redirect - IIS:将多个 URL 重定向到同一个网站
- c++ - 使用 CMake 构建 {fmt} 时出现问题
- symfony4 - 仅当我的用户拥有角色时才在表单中设置默认值:ROLE_USER [symfony 4]
- c# - 将小于 0.1 的小数从 C# 传递到 SQL - SQL Profiler 解释问题
- java - org.apache.poi.openxml4j.opc.PackageRelationshipCollection 问题
- arrays - 全局数组与带有全局指针的局部数组
- flutter - 警报管理器不会在准确的时间触发
- android - 在内存中创建文件夹