【问题标题】:Does JavaScript have an object literal shorthand which automatically assigns to a property a value which is a string of the property name? [closed]JavaScript 是否有一个对象文字速记,它会自动为属性分配一个值,该值是属性名称的字符串? [关闭]
【发布时间】:2021-02-13 15:38:02
【问题描述】:

我明白在 ES2015+ 中,而不是写:

let myObject = { a: "a", b: "b", c: "c" };

我可以使用对象速记来编写以下内容:

let a = "a";
let b = "b";
let c = "c";

let myObject = { a, b, c };
console.log(myObject);

但这并不像我正在寻找的速记。

有没有一种方法可以在首先定义变量的情况下声明一个对象字面量,然后该对象字面量的属性将自动分配值,这些值是对象属性名称的字符串化版本? p>

即我写了类似的东西:

let myObject = { a, b, c };

它会自动解析为:

let myObject = { a: "a", b: "b", c: "c" };

或者那种更短的速记根本不可能?


这个问题的一些背景:

我的用例是同时接受用户的 名称-值对。后者足够简单。在前者的情况下,我不希望用户跳过添加一个 name and 然后一个相同的 value一个就够了。

【问题讨论】:

  • 根本没有。 . .
  • 这样的对象不会特别有用,因为它是从你已经拥有的值到相同值的映射(例如obj["foo"] === "foo",但你已经拥有"foo")。您可以创建一个 Proxy,它只返回您要求的道具的名称,但它可能有助于提供一些关于您为什么需要它的上下文。
  • 为什么不接受一个对象或一个数组,那么,在数组["a", "b", "c"]的情况下,它是对对象{a: "a", b: "b", c: "c"}的简单转换,使用例如.reduce.
  • 您的问题的补充提到了用户提供的值。那么,您能否为将接收此类输入的函数添加样板代码,并指出该函数的输出需要是什么?我问,因为我看不出一个对象 literal 如何与用户输入有任何关系......根据定义,它是 not 文字。
  • 称它为字面量或语法,大概您是在谈论用户输入,即某人创建一个对象来调用您提供的部分 API(例如,他们正在使用的库) .在这种情况下,您是否在记录他们如何这样做(他们不知道如何创建对象)方面询问这个问题?或者您是否建议您的函数实现一些使其成为可能的东西?或者他们是否通过例如您打算解析的字符串?

标签: javascript object ecmascript-6 object-literal shorthand


【解决方案1】:

abc 都不是已定义的变量时,没有语法可以理解{a, b, c}。此外,它不会提供有关这些值的数据类型的线索,因此对于字符串,您需要字符串值,而不是(未定义的)变量引用。

从 cmets 看来,您以字符串的形式获得用户输入,其中包括一系列对和单个值。

这是一个可以解析这样一个字符串的函数:

const toObject = str =>
    Object.fromEntries(
        str.split(" ")
           .map(pair => pair.split("^"))
           .map(([k, v]) => [k, v??k])
    );

let s = "name^John male height^185cm";
let obj = toObject(s);
console.log(obj);

【讨论】:

    猜你喜欢
    • 2017-02-14
    • 2013-05-14
    • 2011-02-17
    • 2016-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 2018-12-31
    相关资源
    最近更新 更多