【问题标题】:javascript create an object with key from a variable [duplicate]javascript使用变量的键创建一个对象[重复]
【发布时间】:2014-03-26 13:42:10
【问题描述】:

在 JavaScript 中,有没有更短的方法从下面的变量创建对象。

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

好吧,最短的看起来像,但这是错误的,因为键是文字 d 而不是它的值。

function wrong(d){
   return {d:d}
}

我不介意第一个版本,但想知道任何简洁的方式。

谢谢。

【问题讨论】:

  • 是的,使用第一种方式。第二种方式,键将是 d,而不是 d 的值。
  • 出于好奇,如果键的名称始终是值,为什么需要将其存储为两者?
  • 如何使用 obj.d = d; ?
  • @RajeshCP - 因为那行不通。

标签: javascript


【解决方案1】:

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

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;
}

【讨论】:

  • 为什么这比 OP 已有的更好?
  • @jfriend00,我不记得曾经说过它更好,但我推荐它,因为您可以将所有初始化保存在同一个地方,而不是 o = {foo: bar}; o[fizz] = buzz;。我觉得它使代码更整洁。
  • @jfriend00,另外,原始代码 is 实际上比 op 最初列出的要短,但没有缩小,所以并没有太大区别跨度>
  • 我不知道为什么这被否决了。在我看来,这是一个很好的答案。 +1
  • @Paulpro,我最初的回答不是很好。
猜你喜欢
  • 2018-07-24
  • 2012-09-21
  • 2011-08-29
  • 2021-09-03
  • 1970-01-01
  • 1970-01-01
  • 2011-12-11
相关资源
最近更新 更多