Вложенный цикл не определен (Javascript)

Моя результирующая матрица кажется неопределенной. В строке 25 это ошибка, которую выдает моя хромированная консоль: «Невозможно установить свойство «0» неопределенного».

Глядя на подобные проблемы, большинство решений матричного умножения, которые я видел, используют 3 вложенных цикла, а не мои 4. Это, вероятно, лучший способ, но четыре цикла - единственный способ, который имеет смысл для меня, поскольку итерации находятся над двумя отдельными строками и двумя отдельными столбцами. Если это является причиной моей проблемы с ошибкой, может кто-нибудь объяснить, почему?

const A = [ [-4,0,5], [-3,-1,2], [6,7,-2], [1, 1, 2]],B = [ [1, 0, 3, 0], [4,5,-1, 2], [2, 4, 3, 1]],C = [];
for (var i = 0; i < A.length; i++) {
	//C[i] = 0;
	for (var j = 0; j < A[j].length; j++) {
		//console.info(A[i][j]);
		for (var y = 0; y < B[0].length; y++) {
			C[i][y] = 0;
			for (var x = 0; x < B.length; x++) {
				//console.info(B[x][y]+ "["+x+","+y+"]");
				console.info(C[i][y] + "[" + i + "," + y);
				C[i][y] += A[i][j] * B[x][y];
			}
			console.info(C[i][y] + "[" + i + "," + y + "] is the resultant matrix");
		}
	}
}        

А какая строка 25?

mbojko 02.07.2019 14:56

Изменить //C[i] = 0; на C[i] = [];

ponury-kostek 02.07.2019 14:58

@mbojko Ну да, конечно! Строка 25: C[i][y] += A[i][j] * B[x][y];

S K 02.07.2019 15:18
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
3
187
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Замените //C[i] = 0; на C[i] = [];. Вам нужно инициализировать массив под C[i], чтобы получить к нему доступ позже C[i][y] = 0;

const A = [ [-4,0,5], [-3,-1,2], [6,7,-2], [1, 1, 2]],B = [ [1, 0, 3, 0], [4,5,-1, 2], [2, 4, 3, 1]],C = [];
for (var i = 0; i < A.length; i++) {
	C[i] = [];
	for (var j = 0; j < A[j].length; j++) {

		for (var y = 0; y < B[0].length; y++) {
			C[i][y] = 0;
			for (var x = 0; x < B.length; x++) {
				C[i][y] += A[i][j] * B[x][y];
			}
		}
	}
}
console.info(C);

Да! Это сработало! Большое спасибо! -- Могу ли я еще спросить, как сделать результирующий матричный вывод в форме матрицы/массива?

S K 02.07.2019 15:27

@SK ваша выходная матрица находится в C, так что просто сделайте console.info(C)

ponury-kostek 02.07.2019 17:03

const A = [ [-4,0,5], [-3,-1,2], [6,7,-2], [1, 1, 2]],B = [ [1, 0, 3, 0], [4,5,-1, 2], [2, 4, 3, 1]],C = [];
for (var i = 0; i < A.length; i++) {
	C[i] = [];
	for (var j = 0; j < A[j].length; j++) {

		for (var y = 0; y < B[0].length; y++) {
			C[i][y] = 0;
			for (var x = 0; x < B.length; x++) {
				C[i][y] += A[i][j] * B[x][y];
			}
		}
	}
}
console.info(C);

Отвечает @ponury-kostek. (Надеюсь, я сделал это правильно; новичок в стеке.)

S K 02.07.2019 20:41

Другие вопросы по теме