有一个细胞网格。整数维存储在一个数组中。如何将这个维度数组减少(或以其他方式转换)为包含所有可能单元格位置数组的数组?
例如,假设网格的大小在数组中([2,2]
),那么在没有for循环的情况下如何生成位置列表([[0,0],[0,1],[1,0],[1,1]]
)? (可能用lodash或下划线?)
我确信这是可能的。在我意识到我在拖延之前,我已经离开了以下for循环:
var size = [ 2, 3 ];
var positions = [];
for ( var x = 0; x < size[0]; ++x ) {
for ( var y = 0; y < size[1]; ++y ) {
positions.push( [ x, y ] );
}
}
答案 0 :(得分:2)
你可以使用times几次,然后浅析flatten生成的数组:
var data = _.times(size[0], function(x){
return _.times(size[1], function(y){
return [x,y];
});
});
var positions = _.flatten(data, true);
答案 1 :(得分:1)
您可以将_.range
与underscore.js一起使用,如下所示:
_.range(size[0] * size[1]).map(function(i) {
return [ Math.floor(i / size[1]), i % size[1] ];
});
编辑:我添加了一些你可以玩的jsfiddle:http://jsfiddle.net/23Lsu6vp/