意外的标记 。在val.toString()中

时间:2015-12-26 05:05:21

标签: javascript node.js

_ = require("underscore");
doors = []

function CreateDoors()
{
    _.map( _.range(100), function(val){
    doors.push( { val.toString() : 0 } );
    });
    console.log(doors);
}

CreateDoors();

我收到意外的令牌错误。在val.toString()。

2 个答案:

答案 0 :(得分:0)

要获取动态对象键,必须使用括号表示法

var _     = require("underscore"),
    doors = [];

function CreateDoors() {
    _.map( _.range(100), function(val){
        var obj = {};
        obj[val.toString()] = 0;
        doors.push( obj );
    });
    console.log(doors);
}

CreateDoors();

答案 1 :(得分:0)

如果您想使用mapmap会为您创建新数组,因此您不需要自己声明并推送它。只需让回调在每个位置返回您想要的值,如

function createDoors() {
  return _.map(_.range(100), function(i) {
    var obj = {};
    obj[i] = 0;
    return obj;
  });
}

var doors = createDoors();

更简洁一点:

function createDoors() {
  return _.map(_.range(100), function(i) {
    return Object.defineProperty({}, i, { value: 0 });
  });
}

因为Object.defineProperty返回对象。

使用ES6语法:

function createDoors() {
  return _.map(_.range(100), i => Object.defineProperty({}, i, {value: 0}));
}

如果您有可用的ES6计算属性名称:

function createDoors() {
  return _.map(_.range(100), i => ({[i]: 0}));
}

如果你有ES7数组理解(在Babel的适当标志下可用):

[ for (i of _.range(100)) { [i]: 0 } ]

顺便说一下,无论如何,toString都没有必要。