2013-12-17 66 views
5

我試圖切換到功能性編程,並希望使用下劃線的JavaScript。下劃線功能javascript

但我卡在第一基地。我不能在所有創建一個數組,並採取命令式語言,我似乎不能正確地變換他們要麼:n.length是正確的,但N [0]。長度是不確定的(見fiddle

var a = new Array(5); 
for (i = 0; i < a.length; i++) { 
    a[i] = new Array(6); 
} 
var n = _.map(a, function (row, rowIdx) { 
    _.map(row, function(col, colIdx) { 
     return rowIdx * colIdx 
    }); 
}); 

console.log(a.length) 
console.log(n.length) 
console.log(a[0].length); 
console.log(n[0].length); 
+0

你究竟想要做什麼?創建一個乘法矩陣? – rossipedia

+0

不,我打算把其他東西放在矩陣中,但我只是用它作爲解釋我想要做什麼的簡單方法 –

+0

有人添加了一條評論,我需要在第二個_.map之前添加return,然後他們將其刪除。我想在這裏記錄這個智慧 –

回答

3

爲「功能性」創建使用下劃線一個5×6矩陣,你可以做這樣的事情:

var matrix = _.range(5).map(function (i) { 
    return _.range(6).map(function (j) { 
     return j * i; 
    }); 
}); 

_.range功能(documentation)是用於創建填充有連續的數字陣列的縮寫。例如,_.range(5)返回數組[0,1,2,3,4]。範圍從零開始。

如果你不想使用_.range,您可以用原始的JavaScript使用數組文本做到這一點:

var matrix = [0,1,2,3,4].map(function (i) { 
    return [0,1,2,3,4,5].map(function (j) { 
     return j * i; 
    }); 
}); 
3

另一種方式來創建一個矩陣是使用_.times:

var matrix = _.times(6, function(x){ 
    return _.times(7, function(y){ 

     // do whatever needs to be done to calculate the value at x,y 

     return x + ',' + y; 
    }); 
}); 
0

在ES6/2015

var range = num => Array.apply(null, Array(num)).map((i, n) => n); 
 

 
var matrix2d = (a1, a2) => a1.map(i => a2.map(j => [i, j])); 
 

 
console.log(matrix2d(range(5), range(6)));