![](/img/trans.png)
[英]Convert Object properties to multiple object array in JavaScript
[英]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 回调时,目标属性ids
和items
的值将是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.