Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/438.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript从变量创建一个带有键的对象_Javascript - Fatal编程技术网

javascript从变量创建一个带有键的对象

javascript从变量创建一个带有键的对象,javascript,Javascript,在JavaScript中,是否有比下面更短的方法从变量创建对象 var d = 'something'; function map(d){ var obj = {}; obj[d] = d; return obj; } 最短的看起来是这样的,但它是错误的,因为key是literald而不是它的值 function wrong(d){ return {d:d} } 我不介意第一版,但想知道有没有简洁的方法 谢谢。我建议实例化一个匿名函数 function map(d)

在JavaScript中,是否有比下面更短的方法从变量创建对象

var d = 'something';
function map(d){
   var obj = {};
   obj[d] = d;
   return obj;
}
最短的看起来是这样的,但它是错误的,因为key是literal
d
而不是它的值

function wrong(d){
   return {d:d}
}
我不介意第一版,但想知道有没有简洁的方法


谢谢。

我建议实例化一个匿名函数

function map(d) {
    return new function () {
        this[d] = d;
    };
}
使用匿名函数将允许您将所有属性声明保持在同一位置,以便更有组织。如果需要设置其他默认关键点,可以轻松添加它们:

new function () {
    this[d] = d;
    this.foo = 'bar';
};
与使用对象文字相比,您将在两个位置进行声明:

obj = {
    foo: 'bar'
};
obj[d] = d;
尽管如此,原始代码仍然很好。它简明易懂,易于维护

function map(d) {
    var obj = {};
    obj[d] = d;
    return obj;
}

是的,用第一种方法。第二种方法是,密钥将是d,而不是
d
的值。出于好奇,如果密钥的名称始终是值,为什么需要将其存储为两者?使用obj.d=d@RajeshCP-因为这不起作用。为什么这比OP已经有的更好?@jfriend00,我不记得曾经说过它更好,但我推荐它,因为你可以将所有初始化保持在同一个位置,而不是执行
o={foo:bar};o[嘶嘶声]=嗡嗡声。我觉得它使代码更整洁。@jfriend00,而且,原始代码实际上比op最初列出的代码要短,但这并没有缩小,所以它并没有太大的区别。我不知道为什么会被否决。在我看来,这是一个极好的答案+1@Paulpro,我最初的回答不是很好。