Чи існує спосіб використання змінних ключів у літералі об’єкта JavaScript?


82

У мене є такий код.

var key = "anything";   
var object = {   
    key: "key attribute"  
};

Я хочу знати, чи є спосіб замінити це key"чим-небудь".

подібно до

var object = {  
    "anything": "key attribute"     
};

Відповіді:


197

У ES6 використовуйте обчислювані імена властивостей .

const key = "anything";   

const object = {   
    [key]: "key attribute"
//  ^^^^^  COMPUTED PROPERTY NAME
};

Зверніть увагу на квадратні дужки навколо key. Ви можете вказати будь-який вираз у квадратних дужках, а не лише змінну.


5
працює на хромі як добре. найпростіша та найкраща відповідь (у)
Анум Шераз

1
Це чудово для ES6, але як щодо старих версій (IE11 вийде з ладу на наведеному вище коді)
pascalzon

117

Так. Ви можете використовувати:

var key = "anything";
var json = { };
json[key] = "key attribute";

Або просто скористайтеся другим способом, якщо під час написання програми у вас є значення.


15

На сучасному Javascript (ECMAScript 6) ви можете впорядковувати змінну за допомогою квадратних дужок:

var key = "anything";

var json = {
    [key]: "key attribute"
};

12

Це повинно зробити трюк:

var key = "anything";

var json = {};

json[key] = "key attribute";

Але він хоче зробити це в контексті об'єкта-літералу.

4

Рішення:

var key = "anything";

var json = {};

json[key] = "key attribute";

Поясніть, будь ласка, своє рішення.
Martin Zabel

1
@MartinZabel Навряд чи потрібно пояснення.

-2

Затвори прекрасно працюють для цього.

function keyValue(key){
  return function(value){
    var object = {};
    object[key] = value;
    return object;
  }
}

var key = keyValue(key);
key(value);

Закриття - це лише механізм, що використовується тут. Концепція - HOF.

1
HOF = функції вищого порядку.
Рік,

-2

Нещодавно потрібно рішення, як встановити файли cookie, що передають динамічні значення ключів json. Використовуючи https://github.com/js-cookie/js-cookie#json , це можна зробити легко. Хотіли зберегти кожне вибране значення параметра користувача у файлі cookie, щоб воно не було втрачено у разі вимкнення вкладки або браузера.

var json = { 
        option_values : {}
    };
    $('option:selected').each(function(index, el) {
        var option = $(this);
        var optionText = option.text();
        var key = 'option_' + index;
        json.option_values[key] = optionText;
        Cookies.set('option_values', json, { expires: 7 } );
    }); 

Потім ви можете отримати кожне значення ключа cookie при кожному завантаженні сторінки за допомогою

Cookies.getJSON('option_values');

-3

Ну, немає "прямого" способу зробити це ...

але це має зробити це:

json[key] = json.key;
json.key = undefined;

Це трохи складно, але привіт, це працює!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.