首页 > 解决方案 > 根据唯一 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 所以如何也包含它

标签: react-nativereact-native-android

解决方案


使用很容易实现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)


推荐阅读