2013-12-17 5 views
5

Я пытаюсь переключиться в основном на функциональное программирование и хочу использовать подчеркивание для JavaScript.Подчеркивающий функциональный javascript

Но я застрял на первой базе. Я не мог создать массив на всех, и прибегал к императивному языку, и я не могу показаться, чтобы превратить их должным образом либо: n.length правильно, но п [0] .length не определено (см 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 ut, который они удалили впоследствии , Я хочу записать эту мудрость здесь –

ответ

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)));

Смежные вопросы