有什么方法可以定义一个字符串值,例如简写属性,例如(这不起作用):
const dict = {
USER_LOGIN,
USER_LOGOUT
};
这将等同于:
const dict = {
USER_LOGIN: "USER_LOGIN",
USER_LOGOUT: "USER_LOGOUT"
};
我想定义一个常量字典,但是我想知道是否可以以某种方式避免重复模式MYVALUE : "MYVALUE"
。
是否有任何简便的方法可以声明对象键的值等于它们的字符串值,类似于上面的(无效)代码?
答案 0 :(得分:3)
没有内置的方法可以自动执行类似的操作,但是,如果您想保持代码为DRY,则可以创建一个辅助函数,该函数在传递字符串数组时会创建具有以下属性的对象:>
const makeDict = arr => arr.reduce((a, str) => ({ ...a, [str]: str }), {});
const dict = makeDict(['USER_LOGIN', 'USER_LOGOUT']);
console.log(dict);
答案 1 :(得分:1)
开个玩笑:
let dict;
with(new Proxy({}, {
get(_, key) { return key; },
has(_, key) { return key !== "dict"; }
})) {
dict = {
USER_LOGIN,
USER_LOGOUT
};
}
console.log(dict);
如果您认为无效... ,请尝试:)
但认真的是:整个问题都不过分。
答案 2 :(得分:1)
您可以声明它们并将这些常量用作对象上的key-value
。
const USER_LOGIN = "USER_LOGIN";
const USER_LOGOUT = "USER_LOGOUT";
const dict = { USER_LOGIN, USER_LOGOUT };
console.log(dict);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 3 :(得分:1)
速记属性表示法仅在您具有与要声明的属性同名的变量时才有效:
const USER_LOGIN = 'USER_LOGIN';
const USER_LOGOUT = 'USER_LOGOUT';
const dict = {
USER_LOGIN,
USER_LOGOUT
};
console.log(dict);
否则,您必须指定整个对象:
const dict = {
USER_LOGIN: "USER_LOGIN",
USER_LOGOUT: "USER_LOGOUT"
};
或通过提及@CertainPerformance的帮助程序进行创建。