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

如何在JavaScript中无初始依赖属性地将数组转换为对象

解决方案

你只需要在reduce的回调函数中,先初始化空对象里缺失的ids和items属性,就能用空对象作为初始值完成转换。以下是修改后的完整代码:

import { v4 as id } from "uuid";

export const createItem = (name) => {
  return {
    id: id(),
    name,
    packed: false
  };
};

let items = ["Backpack", "Vitamins", "Kindle"].map((x) => createItem(x));

console.log(items);

const converter = items.reduce(
  (obj, item) => {
    // 初始化缺失的属性
    if (!obj.ids) obj.ids = [];
    if (!obj.items) obj.items = {};
    
    obj.ids.push(item.id);
    obj.items[item.id] = item;
    return obj;
  },
  {} // 初始值改为空对象
);

console.log(converter);

逻辑说明

  • 初始值传入空对象{},不再依赖预先声明的固定结构
  • 每次迭代时,先检查当前累加对象obj是否包含ids和items属性,若不存在则创建对应的空数组/空对象
  • 后续操作和原代码保持一致,将item的id存入ids数组,同时把item挂载到items对象的对应id键下

如果你想用更简洁的语法,可以使用ES2021的逻辑空赋值运算符??=,效果和上面的判断逻辑完全一致:

const converter = items.reduce(
  (obj, item) => {
    obj.ids ??= [];
    obj.items ??= {};
    
    obj.ids.push(item.id);
    obj.items[item.id] = item;
    return obj;
  },
  {}
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 10:25:33