Node.js 中的嵌套对象分配

分享于2022年07月17日 javascript node.js 问答
【问题标题】:Node.js 中的嵌套对象分配(Nested object assignment in Node.js)
【发布时间】:2022-01-26 03:20:12
【问题描述】:

假设我有一个可变内容的对象 ( baz )。如何在一行中将带有键 ( baz ) 的子对象 ( foo ) 分配给该对象?


示例:

var baz = {}
baz.foo.bar = 1;
console.assert(baz === { foo: { bar: 1 } });

(或者,在 foo 已经定义的情况下)

var baz = { foo: { 1: "b" } };
baz.foo.bar = 1;
console.assert(baz === { foo: { 1: "b", bar: 2 } });

  • 请注意,是的,我可以轻松编写一个可以使用 nestedAssign(baz, "foo", "bar", 2) 的函数,但我正在寻找一个内置的解决方案。
  • 你的意思是,键 bar
  • 我并不完全清楚您要做什么以及为什么。您在寻找 Object.assign() 吗?某种传播运算符?

【解决方案1】:

可能 将所有内容放在一行中,但我个人不建议这样做。从技术上讲,您在做两件完全不同的事情:

  • 如果对象尚不存在,则将对象分配为属性
  • 如果对象已经存在,则分配一个属性,改变现有对象

您可以将 baz.foo 或空对象分配给 baz.foo ,然后将 bar 属性值分配给结果对象:

const baz = {};
(baz.foo ??= {}).bar = 1;
console.log(baz.foo.bar);

const baz2 = {};
(baz2.foo ??= {}).bar = 1;
console.log(baz2.foo.bar);

我更喜欢

// Create the object if it doesn't exist yet
baz.foo ??= {};
// Assign the new nested value
baz.foo.bar = 1;

在大多数情况下,代码可读性比 golfing 更重要。

  • 有效点,我希望在 1 行中做到这一点,以使其更具可读性,同时不那么冗长。这似乎同样有效,比编写现有函数来执行此操作要好得多。