You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js处理含嵌套数组的JSON:合并重复产品并传至React前端

嵌套JSON产品去重并累加价格(Node.js后端 + React前端实现)

需求说明

处理一组包含嵌套产品数组的JSON数据,针对每个对象中的productlist数组,将相同名称的产品去重并累加其价格,最终在Node.js完成处理后将结果返回给React前端。

原始数据

let obj = [
  {
    "_id": "WER12345",
    "date": "2022-07-24",
    "totalproduct": 6,
    "productlist": [
      {"product": "iphone 13", "price": 1000},
      {"product": "iphone 12", "price": 800},
      {"product": "iphone 11", "price": 600},
      {"product": "iphone 12", "price": 800},
      {"product": "iphone 13", "price": 1000},
      {"product": "iphone 12", "price": 800}
    ]
  },
  {
    "_id": "WER98763",
    "date": "2022-07-24",
    "totalproduct": 4,
    "productlist": [
      {"product": "iphone 13", "price": 1000},
      {"product": "iphone 11", "price": 600},
      {"product": "iphone 11", "price": 600},
      {"product": "iphone 12", "price": 800}
    ]
  }
]

期望处理结果

[
  {
    "_id": "WER12345",
    "date": "2022-07-24",
    "totalproduct": 6,
    "productlist": [
      {"product": "iphone 13", "price": 2000},
      {"product": "iphone 12", "price": 2400},
      {"product": "iphone 11", "price": 600}
    ]
  },
  {
    "_id": "WER98763",
    "date": "2022-07-24",
    "totalproduct": 4,
    "productlist": [
      {"product": "iphone 13", "price": 1000},
      {"product": "iphone 11", "price": 1200},
      {"product": "iphone 12", "price": 800}
    ]
  }
]

实现步骤

1. Node.js后端处理逻辑

通过Array.map遍历外层数组,结合Array.reduce对每个productlist做去重和价格累加:

// 核心数据处理函数
const processProductData = (rawData) => {
  return rawData.map(item => {
    // 累加相同产品的价格
    const processedProducts = item.productlist.reduce((acc, curr) => {
      const target = acc.find(p => p.product === curr.product);
      if (target) {
        target.price += curr.price;
      } else {
        acc.push({...curr});
      }
      return acc;
    }, []);

    // 返回保留原字段的处理后对象
    return {
      ...item,
      productlist: processedProducts
    };
  });
};

// 示例:用Express搭建接口返回处理后的数据
const express = require('express');
const app = express();
app.use(express.json());

app.get('/api/products', (req, res) => {
  const processedData = processProductData(obj);
  res.json(processedData);
});

app.listen(3001, () => {
  console.log('服务运行在3001端口');
});

2. React前端接收并展示数据

使用fetch请求后端接口,获取数据后渲染:

import { useState, useEffect } from 'react';

function ProductOrderList() {
  const [orderData, setOrderData] = useState([]);

  useEffect(() => {
    fetch('http://localhost:3001/api/products')
      .then(res => res.json())
      .then(data => setOrderData(data))
      .catch(err => console.error('数据请求失败:', err));
  }, []);

  return (
    <div className="order-container">
      {orderData.map(order => (
        <div key={order._id} className="order-card">
          <h3>订单ID: {order._id}</h3>
          <p>日期: {order.date}</p>
          <p>总商品数: {order.totalproduct}</p>
          <ul className="product-list">
            {order.productlist.map((product, idx) => (
              <li key={idx}>
                {product.product}: ${product.price}
              </li>
            ))}
          </ul>
        </div>
      ))}
    </div>
  );
}

export default ProductOrderList;

内容的提问来源于stack exchange,提问作者kick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 04:24:12