【问题标题】:Nested object assignment in Node.jsNode.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() 吗?某种传播运算符?

标签: javascript node.js


【解决方案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 行中做到这一点,以使其更具可读性,同时不那么冗长。这似乎同样有效,比编写现有函数来执行此操作要好得多。
【解决方案2】:

对于第一种情况:

baz.foo = {bar :1}

您的代码适用于第二种情况

(注意以下代码输出 false :

a = {b:1}
console.log(a==={b:1})

)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多