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

如何在循环中使用forEach函数,按SKU分组展示产品对应价格

问题

我需要制作一份价格列表,要求根据SKU值,将同一个产品的所有价格统一展示在该产品的条目下方。目前我通过循环把数据数组的内容插入到div中,但当前代码会重复显示每个产品的标题和SKU,每个价格项都会带出一遍产品信息。我尝试在for循环中使用jQuery的$.each函数,结果得到了异常的重复内容。


原始代码

JavaScript

var arr = [
  {
    "sku": "552",
    "title": "orange",
    "price": "1.55",
    "per": 1
  },
  {
    "sku": "552",
    "title": "orange",
    "price": "2.00",
    "per": 2
  },
  {
    "sku": "552",
    "title": "orange",
    "price": "3.50",
    "per": 4
  },
  {
    "sku": "551",
    "title": "bannana",
    "price": "0.95",
    "per": 1
  },
  {
    "sku": "551",
    "title": "bannana",
    "price": "2.20",
    "per": 3
  },
  {
    "sku": "544",
    "title": "apple",
    "price": "0.70",
    "per": 1
  },
  {
    "sku": "501",
    "title": "pear",
    "price": "1.15",
    "per": 1
  }
];

for(var i=0; i<arr.length; i++){
  var sku = arr[i].sku;
  var title = arr[i].title;
  var price = arr[i].price;
  var per = arr[i].per;

  var html = "<p>" + sku + " - " + title + "</p>";
  html +=   "<p><b>" + per + "</b> - " + price + "</p>";
                
  $("#div_1").append(html);
}

HTML

<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<div id="div_1"></div>

错误的尝试代码

for(var i=0; i<arr.length; i++){
  var sku = arr[i].sku;
  var title = arr[i].title;
  var price = arr[i].price;
  var per = arr[i].per;

  var html = "<p>" + sku + " - " + title + "</p>";
  
  $.each(arr, function(key, value) {
    html +=   "<p><b>" + per + "</b> - " + price + "</p>";
  });
                        
  $("#div_1").append(html);
}

解决方案

核心思路是先按SKU对数据进行分组,把同一个SKU的所有价格项归到一起,再统一渲染:

方法一:使用原生JS分组后渲染

// 按SKU分组数据
const groupedData = {};
arr.forEach(item => {
  if (!groupedData[item.sku]) {
    groupedData[item.sku] = {
      sku: item.sku,
      title: item.title,
      prices: []
    };
  }
  groupedData[item.sku].prices.push({
    per: item.per,
    price: item.price
  });
});

// 渲染分组后的数据
let html = '';
Object.values(groupedData).forEach(product => {
  html += `<p>${product.sku} - ${product.title}</p>`;
  product.prices.forEach(priceItem => {
    html += `<p><b>${priceItem.per}</b> - ${priceItem.price}</p>`;
  });
});

$("#div_1").append(html);

方法二:使用jQuery的$.each实现(逻辑一致)

// 按SKU分组数据
const groupedData = {};
$.each(arr, function(index, item) {
  if (!groupedData[item.sku]) {
    groupedData[item.sku] = {
      sku: item.sku,
      title: item.title,
      prices: []
    };
  }
  groupedData[item.sku].prices.push({
    per: item.per,
    price: item.price
  });
});

// 渲染分组后的数据
let html = '';
$.each(Object.values(groupedData), function(index, product) {
  html += `<p>${product.sku} - ${product.title}</p>`;
  $.each(product.prices, function(idx, priceItem) {
    html += `<p><b>${priceItem.per}</b> - ${priceItem.price}</p>`;
  });
});

$("#div_1").append(html);

处理后每个产品只会显示一次SKU和标题,下方统一列出该产品的所有价格项,不会出现重复内容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:33:15