2013-12-22 4 views
1

Я никогда не думал, что я наткнуться на проблемы, как это, но эй, что вы знаете ..Javascript свойство объекта с именем переменной

var prop = 'horses' 

console.log({ 
    prop: 1 
}); 

Как я могу это произвести объект со свойством horses вместо prop и, возможно, сделать это в одной строке? Потому что я могу думать о решении, но то, что я действительно ищу, - однострочный.

+1

Настоящий однострочный: «var prop =« лошади »; console.log ((function (o, p) {o [p] = 1; return o;}) ({}, prop)); ' –

ответ

3

Вы можете использовать квадратные скобки обозначения:

var obj = {}; 
obj[prop] = 1; 
console.log(obj); 

В JavaScript, вы можете обратиться к свойству либо точечной нотации и буквальное имя (foo.bar), или в квадратных скобках обозначения с строки имя (foo["bar"]) , В последнем случае строка может быть результатом любого выражения, включая (в вашем случае) ссылку на переменную.

... но то, что я действительно ищу, является однострочным.

Невозможно сделать это как часть инициализатора объекта, однако вы должны сделать это отдельно. Если вы хотите один вкладыш, вам нужно сделать вызов функции, например:

console.log(makeObj(prop, 1)); 

где makeObj является

function makeObj(propName, propValue) { 
    var obj = {}; 
    obj[propName] = propValue; 
    return obj; 
} 
1

Попробуйте использовать JSON для создания объекта:

console.log(JSON.parse("{\"" + prop + "\":\"1\"}"); 
+0

Для этого не нужно запускать парсер JSON. Творческий, тем не менее. –

Смежные вопросы