проверить четное число в многомерном массиве - PullRequest
0 голосов
/ 28 января 2019

Привет, у меня есть проблема, когда код, я хочу проверить четное число в многомерном массиве и затем изменить на «X», если в строке или столбце есть четные числа, больше чем равно 3 раза, но я изменяю все это на'X', хотя он меньше 3. мой код такой:

function evenNumbers(numbers){

  for(var i = 0; i < numbers.length; i++){
     for(var j = 0; j < numbers[i].length; j++){
        if(numbers[i][j] % 2 == 0){
           numbers[i][j] = 'X'
        }
     }
  }
  return numbers
}


console.log(evenNumbers([
  [1, 2, 4, 6, 5],
  [6, 17, 8, 11, 10],
  [8, 11, 10, 18, 16],
  [18, 12, 19, 27, 21],
  [22, 10, 12, 22, 12]
]));

ожидаемый результат:

 [1, 'X', 'X', 'X', 5],
 ['X', 17, 'X', 11, 10],
 ['X', 11, 'X', 'X', 'X'],
 ['X', 12, 19,  27 , 21],
 [''X, 'X', 'X', 'X', 'X']

что я получил:

[ [ 1, 'X', 'X', 'X', 5 ],
  [ 'X', 17, 'X', 11, 'X' ],
  [ 'X', 11, 'X', 'X', 'X' ],
  [ 'X', 'X', 19, 27, 21 ],
  [ 'X', 'X', 'X', 'X', 'X' ] ]

Спасибо,заранее Помогите мне без ES6 встроенного просто обычного JS, пожалуйста.Еще раз спасибо

Ответы [ 2 ]

0 голосов
/ 28 января 2019

Вы можете попробовать следующий подход:

Идея:

  • Цикл на массиве и вернуть массив, где X заменяется на четные числа.
  • Сохранитьотслеживание количества замен.
  • Если количество соответствует пороговому значению, верните этот новый массив.
  • Если нет, верните исходный массив.

Таким образом, выне понадобится дополнительный цикл только для проверки правильности замены.

function replaceEvensWithCondition(arr, minCount, replaceChar) {
  return arr.map(function(row) {
    var count = 0;
    var updatedArray = row.map(function(n) {
      var isEven = n % 2 === 0;
      count += +isEven;
      return isEven ? replaceChar : n;
    });
    return count >= minCount ? updatedArray : row
  });
}

var arr = [ [1, 2, 4, 6, 5], [6, 17, 8, 11, 10], [8, 11, 10, 18, 16], [18, 12, 19, 27, 21], [22, 10, 12, 22, 12] ];

console.log(replaceEvensWithCondition(arr, 3, 'X'));
0 голосов
/ 28 января 2019

Вы можете использовать некоторые для проверки, затем отобразить карту

const arr = [
  [1, 2, 4, 6, 5],
  [6, 17, 8, 11, 10],
  [8, 11, 10, 18, 16],
  [18, 12, 19, 27, 21],
  [22, 10, 12, 22, 12]
];

function xEvens(arr) {
  return arr.map(row => {
    let i = 0;
    let shouldChange = row.some(n => n % 2 === 0 && ++i >= 3);
    return shouldChange ? row.map(n => n % 2 === 0 ? 'X' : n) : row;
  });
}

console.log(xEvens(arr));

Предварительная версия es6

var arr = [
  [1, 2, 4, 6, 5],
  [6, 17, 8, 11, 10],
  [8, 11, 10, 18, 16],
  [18, 12, 19, 27, 21],
  [22, 10, 12, 22, 12]
];

function xEvens(arr) {
  return arr.map(function(row) {
    var i = 0;
    var shouldChange = row.some(function(n) {
      return n % 2 === 0 && ++i >= 3;
    });
    return shouldChange ? row.map(function(n) {
      return n % 2 === 0 ? 'X' : n
    }) : row;
  });
}

console.log(xEvens(arr));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...