在ES6中,我们可以这样做:
const key = "foo"
const myObj = { key }
myObj
// => { foo: "foo" }
因此,{ key }
与{ key: key }
等效。
但是,如何在没有key
变量的情况下创建相同的对象?
我想要{ foo: "foo" }
之类的东西。我试过了obj = { "foo" }
,但是它会抛出。
在不使用变量且不复制foo
字的情况下,构建此对象的正确方法是什么?
答案 0 :(得分:5)
但是,如何在没有关键变量的情况下创建相同的对象?
我想要
{ foo: "foo" }
之类的东西。我试过了obj = { "foo" }
,但是它会抛出。
你不能。如果您还没有具有所需名称的变量和所需的值(您在问题中使用初始示例),则必须同时指定名称和值。
如果你的起点是字符串文字"foo"
,你必须将其分配给变量并使用它(var x = "foo"; var obj = {}; obj[x] = x;
),或者写foo
两次(var obj = {foo: "foo"}
})。
但是你说你不想做其中任何一件事,所以答案是:你不能。
答案 1 :(得分:1)
如果您有一个键名数组,则可以使用Array.reduce():
const keyArray = ['foo', 'bar', 'other'];
const requiredObject = keyArray.reduce((obj, val) => {
obj[val] = val;
return obj;
});
答案 2 :(得分:0)
像我猜的那样,通过使用javascript对象的数组访问属性。
您可以使用数组括号Obj['propertyname'] === Obj.propertyname
const key = "foo"
const other = "bar";
const myObj = { };
myObj[key] = key;
myObj[other] = other;
console.log(myObj);
或者,将对象声明为整体,因为正如你所说的那样,没有变量。所以你只需在代码中定义对象。
const myObj = {
foo : 'foo' ,
bar: 'bar'
};
console.log(myObj);
这已经过了深层次。
const myObj = {
add : function(key) {
this[key] = key;
}
}
myObj.add('foo');
myObj.add('bar');
console.log(myObj);
无法复制变量名称或将其分配给变量。
答案 3 :(得分:0)
你可以做的是,使用数组表示法进行分配,如果密钥已经存在,它将覆盖该值。
const myObj = {};
// if just you've just a string, you can use the shortcut, instead use the string on twice.
myObj['key'] = 'key'
myObj['foo'] = 'foo'
const some_var = 'some_var_value'
myObj[some_var] = some_var
答案 4 :(得分:0)
也许您可以使用创作者。
const keyObjCreator = (key) => {
const obj = {};
obj[key] = key;
return obj;
};
keyObjCreater3("foo")
// {foo: "foo"}
答案 5 :(得分:0)
您可以使用带标签的模板文字来解析并完成您想做的事情...
enumify = ([str]) =>
str
.replace(/\s/g, '')
.match(/\{([^\}]+)\}/)[1]
.replace(/,$/, '')
.split(',')
.reduce(
(o, k) => ({ ...o, [k]: k }),
{}
);
const enumObj = enumify`{
foo,
bar,
}`;
const enumObj2 = enumify`{foo,bar}`;
console.log(enumObj);
console.log(enumObj2);
答案 6 :(得分:0)
您可以使用一个小工具(最初在 react.js 社区流行)keyMirror。
var keyMirror = require('keyMirror');
var myObj = keyMirror({ foo: null })