Как удалить отрицательные значения из моего многомерного массива?

#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; }