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

如何用jQuery从表格变体生成嵌套层级对象?求技术方案

求助:用jQuery从表格变体数据生成嵌套层级对象

我最近在尝试用jQuery处理表格里的产品变体数据,想要把这些数据转换成指定格式的嵌套层级对象,但试了好几种方法都没成功,有没有大佬能帮忙看看?

先贴下我的HTML结构:

<table>
  <tr class="variants">
    <td> 100g/ <input id="100g" name="variant_name" type="hidden" value="100g"> m/ <input id="m" name="variant_name" type="hidden" value="m"> blue <input id="blue" name="variant_name" type="hidden" value="blue"> </td>
    <td> <input placeholder="SKU" name="sku" type="text" value="1-3"> </td>
    <td><input placeholder="Image" name="image" type="text" value="link"></td>
    <td><input placeholder="Price" name="price" type="text" value="9"></td>
  </tr>
  <tr class="variants">
    <td> 100g/ <input id="100g" name="variant_name" type="hidden" value="100g"> s/ <input id="s" name="variant_name" type="hidden" value="s"> blue <input id="blue" name="variant_name" type="hidden" value="blue"> </td>
    <td> <input placeholder="SKU" name="sku" type="text" value="1-3"> </td>
    <td><input placeholder="Image" name="image" type="text" value="link"></td>
    <td><input placeholder="Price" name="price" type="text" value="9"></td>
  </tr>
  <tr class="variants">
    <td> 200g/ <input id="200g" name="variant_name" type="hidden" value="200g"> m/ <input id="m" name="variant_name" type="hidden" value="m"> blue <input id="blue" name="variant_name" type="hidden" value="blue"> </td>
    <td> <input placeholder="SKU" name="sku" type="text" value="1-3"> </td>
    <td><input placeholder="Image" name="image" type="text" value="link"></td>
    <td><input placeholder="Price" name="price" type="text" value="9"></td>
  </tr>
  <tr class="variants">
    <td> 200g/ <input id="200g" name="variant_name" type="hidden" value="200g"> s/ <input id="s" name="variant_name" type="hidden" value="s"> blue <input id="blue" name="variant_name" type="hidden" value="blue"> </td>
    <td> <input placeholder="SKU" name="sku" type="text" value="1-3"> </td>
    <td><input placeholder="Image" name="image" type="text" value="link"></td>
    <td><input placeholder="Price" name="price" type="text" value="9"></td>
  </tr>
</table>

我想要生成的嵌套对象格式是这样的:

{
  "100g":{
    "m":{
      "blue":{
        "sku":"1-3",
        "image":"link",
        "price": "9"
      }
    },
    "s":{
      "blue":{
        "sku":"1-3",
        "image":"link",
        "price": "9"
      }
    }
  },
  "200g":{
    "m":{
      "blue":{
        "sku":"1-3",
        "image":"link",
        "price": "9"
      }
    },
    "s":{
      "blue":{
        "sku":"1-3",
        "image":"link",
        "price": "9"
      }
    }
  }
}

解决方案

这里给你提供一个可行的jQuery实现思路,核心是遍历每一行变体数据,逐层构建嵌套对象:

$(document).ready(function() {
  // 初始化最终的嵌套对象
  const variantObj = {};

  // 遍历每一行变体
  $('.variants').each(function() {
    const $row = $(this);
    // 获取当前行的所有变体值(隐藏域的value)
    const variantLevels = $row.find('input[name="variant_name"]').map(function() {
      return $(this).val();
    }).get();
    
    // 获取当前行的sku、image、price
    const sku = $row.find('input[name="sku"]').val();
    const image = $row.find('input[name="image"]').val();
    const price = $row.find('input[name="price"]').val();

    // 逐层构建嵌套结构
    let currentLevel = variantObj;
    for (let i = 0; i < variantLevels.length; i++) {
      const level = variantLevels[i];
      // 如果当前层级不存在,就初始化一个空对象
      if (!currentLevel[level]) {
        currentLevel[level] = {};
      }
      // 如果是最后一层,赋值sku等属性
      if (i === variantLevels.length - 1) {
        currentLevel[level] = {
          sku: sku,
          image: image,
          price: price
        };
      } else {
        // 否则进入下一层级
        currentLevel = currentLevel[level];
      }
    }
  });

  // 打印结果,你可以根据需求使用这个对象
  console.log(variantObj);
});

代码说明

  • 首先初始化一个空对象variantObj用来存储最终的嵌套结构
  • 遍历每一行.variants,获取该行所有变体层级的value,存入数组variantLevels
  • 获取当前行的sku、image、price属性值
  • 通过循环逐层构建嵌套:从最外层对象开始,每一层如果不存在就创建空对象,到最后一层时把sku等属性赋值进去
  • 最后得到的variantObj就是你想要的格式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:39:34