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

如何在对象中动态创建或修改子对象以实现杂货清单按货架分类?

嘿,这个需求其实很典型,我来帮你拆解实现思路,再给你具体的代码示例!

首先先纠正个小细节:你期望的结构里,货架对应的应该是数组而不是对象包裹数组(比如1: ['pizza', 'ice cream']而不是1: {['pizza', 'ice cream']}),这样更符合数组存列表的逻辑,也更易操作。

核心实现思路

其实就是「动态判断+属性赋值」的过程,分两步走:

  1. 先初始化一个包含空aisles对象的基础结构,方便后续往里面添加货架和商品;
  2. 遍历你的商品数据,对每个商品判断对应的货架是否已经存在:
    • 如果不存在,就先给这个货架创建一个空数组;
    • 如果已经存在,直接把商品添加到对应的数组里就行。

具体代码示例(以JavaScript为例)

假设你有一份带货架编号的商品列表,比如:

const groceryItems = [
  { name: 'pizza', aisle: 1 },
  { name: 'ice cream', aisle: 1 },
  { name: 'tissues', aisle: 2 },
  { name: 'toilet paper', aisle: 2 },
];

然后用下面的代码就能生成你想要的结构:

// 初始化基础排序结构
const sortedGroceryList = { aisles: {} };

// 遍历所有商品,按货架分类
groceryItems.forEach(item => {
  const aisleId = item.aisle;
  // 检查当前货架是否已存在,不存在则初始化空数组
  if (!sortedGroceryList.aisles[aisleId]) {
    sortedGroceryList.aisles[aisleId] = [];
  }
  // 将商品名称添加到对应货架的数组中
  sortedGroceryList.aisles[aisleId].push(item.name);
});

console.log(sortedGroceryList);

运行后你就能得到:

{
  aisles: {
    1: ['pizza', 'ice cream'],
    2: ['tissues', 'toilet paper']
  }
}

一些扩展小技巧

  • 如果你的货架编号是字符串(比如'Aisle 1'),代码逻辑完全通用,不需要修改;
  • 如果要避免重复添加同一件商品,可以在push前加个判断:if (!sortedGroceryList.aisles[aisleId].includes(item.name)) { ... };
  • 如果有的商品没有货架编号,可以给个默认值(比如aisle: 'Uncategorized'),或者直接跳过这类商品。

希望这个方案能帮到你,如果还有其他细节问题可以随时问!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 06:50:20