2016-10-16 1 views
-2

Я довольно новый для JavaScript, я немного растерялся, что, как Changy моих отрицательных значений в 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); 
0

ответ ArtemKh должен работать , Но только для того, чтобы добавить к этому, с первым циклом вы пройдете через каждый элемент массива, который вы назвали «результатом», а со вторым для вас будет проходить каждый элемент суб-массивов. В случае вы будете проверять, является ли число отрицательным, и если есть, то вы установите его значение равным 0.

0

Для целей обучения, другое решение, используя более функциональный стиль будет выглядеть следующим образом:

var arr = [ 
 
    [-21, 0], 
 
    [22, 0], 
 
    [-1, 0], 
 
    [-5, -18] 
 
    ], 
 
    result = arr.map(subArr => subArr.map(el => el < 0 ? 0 : el)); 
 
console.log(result);

Arrays в JS поставляются с удобными функциями, как reduce или map. Эти функции выполняют другие функции как обратные вызовы, которые будут выполняться по каждому элементу массива синхронно.

Ваша проблема может быть решена путем «преобразования» (или отображения) вашего массива в другой, в котором каждый элемент массива (который, в свою очередь, другой массив) «отображен», чтобы «преобразовать» его элементы в ноль, когда они являются отрицательными.

Надеюсь, это поможет.

0

Вы можете использовать Array.prototype.map, вложенный для повторения каждого элемента в списке. map будет выполнять итерацию по массиву, создав новый массив из возвращаемых значений.

В последней итерации мы проверяем, является ли значение x меньше 0, если оно возвращается 0 else возвращает номер.

var result = [ [ -21, 0 ], [ 22, 0 ], [ -1, 0 ], [ -5, -18 ] ] 
 

 
console.log(
 
    result.map(r => r.map(x => x < 0 ? 0 : x)) 
 
)

0

Вы можете использовать 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; }