首页 文章

使用动态键创建对象[重复]

提问于
浏览
237

这个问题在这里已有答案:

首先,我使用Cheerio进行一些DOM访问并使用Node.js进行解析 . 美好时光 .

继承人的情况:

我有一个功能,我需要创建一个对象 . 该对象使用其键和值的变量,然后返回该单个对象 . 例:

stuff = function (thing, callback) {
  var inputs  = $('div.quantity > input').map(function(){
    var key   = this.attr('name')
     ,  value = this.attr('value');

     return { key : value }
  }) 

  callback(null, inputs);
}

它输出:

[ { key: '1' }, { key: '1' } ]

.map() 返回一个对象数组fyi)

我需要 key 实际上是 this.attr('name') 的字符串 .

什么是在Javascript中将字符串指定为键的最佳方法,考虑到我正在尝试做什么?

2 回答

  • 27

    在新的ES2015 standard for JavaScript(以前称为ES6)中,可以使用计算键创建对象:Object Initializer spec .

    语法是:

    var obj = {
      [myKey]: value,
    }
    

    如果应用于OP的场景,它将变为:

    stuff = function (thing, callback) {
      var inputs  = $('div.quantity > input').map(function(){
        return {
          [this.attr('name')]: this.attr('value'),
        };
      }) 
    
      callback(null, inputs);
    }
    

    Note: browser compatiblity仍需要转发器 .

    使用BabelGoogle's traceur,可以use this syntax today .


    在早期的JavaScript规范(ES5及以下版本)中,对象文字中的键始终按字面解释为字符串 .

    要使用"dynamic"键,您必须使用bracket notation

    var obj = {};
    obj[myKey] = value;
    

    在你的情况下:

    stuff = function (thing, callback) {
      var inputs  = $('div.quantity > input').map(function(){
        var key   = this.attr('name')
         ,  value = this.attr('value')
         ,  ret   = {};
    
         ret[key] = value;
         return ret;
      }) 
    
      callback(null, inputs);
    }
    
  • 658

    您无法使用动态键定义对象文字 . 做这个 :

    var o = {};
    o[key] = value;
    return o;
    

    没有捷径(编辑:现在有一个,ES6,见另一个答案) .

相关问题