有没有办法在JavaScript对象文字中使用变量键?

时间:2009-05-19 13:23:58

标签: javascript

我有这样的代码。

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

我想知道是否有办法将key替换为“任何东西”。

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

8 个答案:

答案 0 :(得分:128)

在ES6中,使用 computed property names

const key = "anything";   

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

请注意key周围的方括号。您实际上可以在方括号中指定任何表达式,而不仅仅是变量。

答案 1 :(得分:98)

是。您可以使用:

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

如果你在编写程序时有手头的值,那么只需使用你的第二种方法。

答案 2 :(得分:9)

这应该可以解决问题:

var key = "anything";

var json = {};

json[key] = "key attribute";

答案 3 :(得分:4)

在现代Javascript(ECMAScript 6)上,您可以使用方括号来隐藏变量:

var key = "anything";

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

答案 4 :(得分:2)

解决方案:

var key = "anything";

var json = {};

json[key] = "key attribute";

答案 5 :(得分:-1)

闭包对此很有用。

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

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

答案 6 :(得分:-1)

最近需要一个解决方案如何设置传递动态json键值的cookie。 使用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');

答案 7 :(得分:-2)

嗯,没有“直接”的方法来做到这一点......

但是应该这样做:

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

它有点棘手,但嘿,它有效!