_ = require("underscore");
doors = []
function CreateDoors()
{
_.map( _.range(100), function(val){
doors.push( { val.toString() : 0 } );
});
console.log(doors);
}
CreateDoors();
我收到意外的令牌错误。在val.toString()。
答案 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)
如果您想使用map
,map
会为您创建新数组,因此您不需要自己声明并推送它。只需让回调在每个位置返回您想要的值,如
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
都没有必要。