1

有一個網格的單元格。整數維存儲在一個數組中。這個維度數組怎麼能夠被減少(或者轉換)爲一個包含所有可能的單元位置數組的數組?在功能上創建一個位置數組(與下劃線/ Lowdash)

例如,如果網格的大小位於數組中([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 ]); 
    } 
} 

回答

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/

2

您可以使用times幾次,然後淺flatten所得陣列:

var data = _.times(size[0], function(x){ 
     return _.times(size[1], function(y){ 
      return [x,y]; 
     }); 
    }); 

    var positions = _.flatten(data, true); 
+0

1,應使之成爲(遞歸)函數,它'[2,2]'作爲輸入 – Bergi 2014-09-23 13:36:47