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

如何在JavaScript中创建嵌套值对象?解决sku元素丢失问题

问题:生成嵌套对象时仅保留最后一个SKU元素,其余丢失

原始数据

[
    {
         "item_id": 696136507565,
         "seller_id": 2549116888,
         "sku": [
            {
                "cart_id": 131, 
                "sku_id": 4939047817461
            },
            {
                "cart_id": 131, 
                "sku_id": 4939047817463
            },
            {   
                "cart_id": 131,
                "sku_id": 4939047817466 
            }
         ]
     },
     {
         "item_id": 729563966440,
         "seller_id": 2211628865398,
         "sku": [
            {
                "cart_id": 132, 
                "sku_id": 894758674833
            },
            {
                "cart_id": 132, 
                "sku_id": 4939047387945
            },
            {   
                "cart_id": 132,
                "sku_id": 1243567817466 
            }
         ]
     }
]

期望生成的对象结构

{
    "2549116888": {
        "2549116888": false,
        "696136507565": {
            "696136507565": false,
            "4939047817461": false,
            "4939047817463": false,
            "4939047817466": false
        }
    },
    "2211628865398": {
        "2211628865398": false,
        "729563966440": {
            "729563966440": false,
            "894758674833": false,
            "4939047387945": false,
            "1243567817466": false
        }
    }
}

当前错误结果

{
    "2549116888": {
        "2549116888": false,
        "696136507565": {
            "696136507565": false,
            "4939047817466": false
        }
    },
    "2211628865398": {
        "2211628865398": false,
        "729563966440": {
            "729563966440": false,
            "1243567817466": false
        }
    }
}

尝试的代码

let myNewObj = {}

myObj?.map((value) =>{
         value?.sku?.map((val,key) =>{
            let skuObj = {
              ...skuObj,
              [val.sku_id]: false 
            }
            myNewObj ={...myNewObj,
              [value.seller_id]:{
                [value.seller_id]: false,
                [value.item_id]:{
                    [value.item_id]: false,
                    [val.sku_id]: false,
                },
                  
              },
            }
         })
      })

问题原因

每次遍历SKU时,都通过对象展开重新创建卖家和商品层级的对象,直接覆盖了之前已添加的SKU项,导致只有最后一个SKU被保留。另外代码中定义的skuObj未被实际使用,无法实现SKU累加。

修正后的代码

const myNewObj = {};

myObj.forEach(item => {
  const sellerId = String(item.seller_id);
  const itemId = String(item.item_id);

  // 初始化卖家结构(不存在则创建)
  if (!myNewObj[sellerId]) {
    myNewObj[sellerId] = {
      [sellerId]: false,
      [itemId]: {
        [itemId]: false
      }
    };
  } 
  // 卖家已存在时,初始化商品结构(不存在则创建)
  else if (!myNewObj[sellerId][itemId]) {
    myNewObj[sellerId][itemId] = {
      [itemId]: false
    };
  }

  // 遍历所有SKU并添加到商品对象
  item.sku.forEach(sku => {
    const skuId = String(sku.sku_id);
    myNewObj[sellerId][itemId][skuId] = false;
  });
});

console.log(myNewObj);

代码说明

  1. 用forEach替代map:仅需遍历修改对象,无需返回新数组
  2. 层级存在性检查:避免重复创建卖家/商品结构,同时防止覆盖已有数据
  3. 逐个添加SKU:遍历每个SKU并直接追加到对应商品对象中,保留所有SKU项

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 02:42:39