繁体   English   中英

如何在没有依赖属性的情况下将数组转换为JavaScript中的object

[英]How to convert an array to object in JavaScript without dependency properties

我正在尝试创建一个数组到 object,它现在工作正常。 但是,在我声明具有所需属性的 object 之前,存在对 object { ids: [], items: {} }的依赖。 我试图在一开始没有 object 依赖的情况下实现同样的事情,最初它将是{}而不是{ 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) => {
    obj.ids.push(item.id);
    obj.items[item.id] = item;
    return obj;
  },
  { ids: [], items: {} }
);

console.log(converter);

您可以使用无效合并赋值运算符 ( ??= )创建初始数组或 object 属性(如果它尚不存在)。

在第一次调用 reducer 回调时,目标属性idsitems的值将是undefined ,因此运算符右侧的值将被分配给它们,括号内的整个表达式将计算为该值.

在回调的后续调用中,值将已经存在于属性中,因此运算符将短路并且括号内的表达式将计算为现有值。

对于此代码段,另请参阅: Crypto.randomUUID()

 // import { v4 as id } from "uuid"; // UUIDv4 in the browser: const id = crypto.randomUUID.bind(crypto); const createItem = (name) => ({ id: id(), name, packed: false, }); const items = ["Backpack", "Vitamins", "Kindle"].map(createItem); const result = items.reduce( (obj, item) => { (obj.ids??= []).push(item.id); (obj.items??= {})[item.id] = item; return obj; }, {}, ); console.log(result);

不确定 object 的问题是什么。 如果你只是想要更简洁的代码,你可以使用Object.fromEntries来生成 object,如果你需要一个 ids 数组,你可以使用 Object.keys。

const thing = Object.fromEntries(
  items.map(i => [i.id, i])
);
const converter = {ids: Object.keys(thing), items: thing};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM