在功能上创建一个位置数组(使用Underscore / Lodash)

时间:2014-09-23 10:08:49

标签: javascript arrays functional-programming underscore.js lodash

有一个细胞网格。整数维存储在一个数组中。如何将这个维度数组减少(或以其他方式转换)为包含所有可能单元格位置数组的数组?

例如,假设网格的大小在数组中([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 ] );
    }
}

2 个答案:

答案 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/