Изменение многомерного массива js
Создайте двумерный массив из элементов 5x5 и заполните его произвольными целыми значениями. На главной диагонали замените все числа со знаком (-) на 10, а числа со знаком (+) на цифру 20.
Почему-то в результате получаю массив из undefined. Помогите разобраться, где ошибка?
let matrix = [
[-1, 2, 3, 4, 5],
[12, 34, 1, 2, 3],
[45, 23, -4, 2, 6],
[3, 35, 76, 545, 5],
[45, 5, 65, 4, -24]
];
console.log(matrix.map(function () {
for (var i = 0; i < matrix.length; i++) {
for (var j = 0; j < matrix[i].length; j++) {
if (i == j) {
if (matrix[i] < 0) {
matrix[i] = 10;
} else {
matrix[i] =20;
}
}
}
}
}));
Ответы (3 шт):
let matrix = [
[-1, 2, 3, 4, 5],
[12, 34, 1, 2, 3],
[45, 23, -4, 2, 6],
[3, 35, 76, 545, 5],
[45, 5, 65, 4, -24],
];
const res = matrix.map((row, y) =>
row.map((item, x) => (y === x ? (item < 0 ? 10 : 20) : item))
);
console.log("res", res);
Метод map() создаёт новый массив с результатом вызова указанной функции для каждого элемента массива.
То есть для каждого элемента массива он будет вызывать указанную функцию, а вы перебираете весь массив. К тому же, map ожидает, что переданная функция вернёт значение. У вас в коде matrix[i] вернёт вам массив, но не элемент, а вы присваиваете массиву целочисленное значение. Необходима проверка на положительность числа, ведь не меньше нуля включает в себя и число 0.
Пример с использованием map:
let matrix = [
[-1, 2, 3, 4, 5],
[12, 34, 1, 2, 3],
[45, 23, -4, 2, 6],
[3, 35, 76, 545, 5],
[45, 5, 65, 4, -24]
];
console.log(matrix.map(function (currentValue, index) {
return currentValue.map(function(cv, j) {
if (index == j) {
if (cv > 0) {
return 20;
} else if (cv < 0) {
return 10;
} else {
return cv;
}
} else {
return cv;
}
});
}));
Но в задании, видимо, не подразумевается какая-либо гибкость, поэтому вот:
let matrix = [
[-1, 2, 3, 4, 5],
[12, 34, 1, 2, 3],
[45, 23, -4, 2, 6],
[3, 35, 76, 545, 5],
[45, 5, 65, 4, -24]
];
for (let i = 0; i < 5; i++) {
if (matrix[i][i] < 0) matrix[i][i] = 10;
else if (matrix[i][i] > 0) matrix[i][i] = 20;
}
console.log(matrix);
let matrix = [
[-1, 2, 3, 4, 5],
[12, 34, 1, 2, 3],
[45, 23, -4, 2, 6],
[3, 35, 76, 545, 5],
[45, 5, 65, 4, -24]
];
for (var i = 0; i < matrix.length; i++) {
for (var j = 0; j < matrix.length; j++) {
if (i == j) {
if (matrix[i][j] < 0) {
matrix[i][j] = 10;
} else {
matrix[i][j] = 20;
}
}
}
}
console.log (matrix);