#javascript #arrays
#javascript #массивы
Вопрос:
Я довольно новичок в javascript, я немного смущен тем, как изменить мои отрицательные значения на 0
var result = [ [ -21, 0 ], [ 22, 0 ], [ -1, 0 ], [ -5, -18 ] ]
console.log(result)//[ [ -21, 0 ], [ -22, 0 ], [ -1, 0 ], [ -5, -18 ] ]
Я хочу, чтобы мой вывод выглядел следующим образом
[ [ 0, 0 ], [ 22, 0 ], [ 0, 0 ], [ 0, 0 ] ]
Ответ №1:
var result = [ [ -21, 0 ], [ 22, 0 ], [ -1, 0 ], [ -5, -18 ] ]
for (var i=0;i < result.length;i ) {
for (var k=0;k < result[i].length;k ) {
if (result[i][k] < 0) {
result[i][k] = 0
}
}
}
console.log(result);
Ответ №2:
Ответ АртемХа должен сработать. Но просто чтобы добавить к этому, с первым циклом for вы пройдете через каждый элемент массива, который вы назвали «результатом», а со вторым for вы пройдете через каждый элемент подмассивов. В if вы проверите, является ли число отрицательным, и если да, вы установите его значение равным 0.
Ответ №3:
Для целей обучения другим решением, использующим более функциональный стиль, было бы следующее:
var arr = [
[-21, 0],
[22, 0],
[-1, 0],
[-5, -18]
],
result = arr.map(subArr => subArr.map(el => el < 0 ? 0 : el) );
console.log(result);
Массивы в JS поставляются с удобными функциями, такими как reduce или map. Эти функции принимают другие функции в качестве обратных вызовов, которые будут выполняться над каждым элементом массива синхронно.
Ваша проблема может быть решена «преобразованием» (или отображением) вашего массива в другой, в котором каждый элемент массива (который, в свою очередь, является другим массивом) «сопоставляется» для «преобразования» его элементов в ноль, когда они отрицательны.
Надеюсь, это поможет.
Ответ №4:
Вы можете использовать Array.prototype.map
nested для перебора каждого элемента в списке. map
будет выполняться итерация по массиву, создающему новый массив из возвращенных значений.
на последней итерации мы проверяем, является ли значение x меньше 0, если оно возвращает 0, иначе возвращает число.
var result = [ [ -21, 0 ], [ 22, 0 ], [ -1, 0 ], [ -5, -18 ] ]
console.log(
result.map(r => r.map(x => x < 0 ? 0 : x))
)
Ответ №5:
Вы могли бы использовать Math.max для значений и перебирать внешний и внутренний массив.
var array = [[-21, 0], [22, 0], [-1, 0], [-5, -18]],
result = array.map(function (a) {
return a.map(function (b) {
return Math.max(b, 0);
});
});
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
То же самое в ES6
var array = [[-21, 0], [22, 0], [-1, 0], [-5, -18]],
result = array.map(a => a.map(b => Math.max(b, 0)));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }