функция createIdentityMatrix (a, b) - PullRequest
0 голосов
/ 31 мая 2018

Мне нужно создать функцию, которая создает что-то вроде этого:

createIdentityMatrix(4,4) => [ [1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1] ];

Я сделал что-то вроде этого:

var nextTab = []
var tab = [nextTab]
function createIdentityMatrix(a,b) {
for (var i = 0; i < a; i++) {
  for (var j = 0; j < b; j++) {
    if (i === j) {
      // secondTab.push([tab.push(1)])
      tab.push([nextTab.push(1)])
    }else {
      tab.push([nextTab.push(0)])
      // secondTab.push([tab.push(0)])
    }
  }return nextTab
}
}
console.log(createIdentityMatrix(4,4));

Как вы видите, это не работает, то же самоеесли я сделаю return tab.Я знаю, что оператор return закрывает цикл ...

Итак, как создать новый массив после четырех циклов и увеличить его еще раз?

Ответы [ 3 ]

0 голосов
/ 31 мая 2018

Может быть более элегантно с использованием функционального программирования:

const identity = (width, height) => 
 Array.from({length: width}, (_, row) => 
   Array.from({length: height}, (_, col) => +(row === col))
 );
0 голосов
/ 31 мая 2018

Вы пытаетесь сделать что-то вроде этого

function createIdentityMatrix(size) {
const matrix = [];
for (let i = 0; i < size; i++) {
    const line = [];
    for (let j = 0; j < size; j++) {
        line[j] = i === j ? 1 : 0;
    }
    matrix.push(line);
}

return matrix;

}

0 голосов
/ 31 мая 2018

Вы можете проверить, равен ли индекс внешнего массива индексу внутреннего массива, а затем вернуть 1, в противном случае 0.

function createIdentityMatrix(a, b) {
    return Array.from(
        { length: a },
        (_, i) => Array.from({ length: b }, (_, j) => +(i === j))
    );
}

console.log(createIdentityMatrix(4, 4));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...