问题描述
我了解在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);
但这与我正在寻找的简写不一样。
有没有一种方法可以声明对象文字而无需先定义变量,并且该对象文字的属性将被自动分配为对象属性名称的字符串化值? >
即我写了类似的东西:
let myObject = { a,c };
,它会自动解析为:
let myObject = { a: "a",c: "c" };
还是这种 shorter 简写根本不可能?
此问题的一些背景:
我的用例是接受用户的值和名称-值对。后者足够简单。对于前者,我不希望用户跳过添加名称 和然后添加相同的值只要一个就够了。
解决方法
当{a,b,c}
,a
和b
都不是定义变量时,没有语法可以理解c
。而且,它不会提供有关这些值的数据类型的线索,因此对于字符串,您将需要字符串值,而不是(未定义的)变量引用。
从注释中看,您似乎可以以字符串形式获得用户输入,其中包括一系列对和单个值。
这是一个可以解析这样的字符串的函数:
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);