@Alex_87

Что не так с кодом?

Добрый день! Задание следующее:
Реализуйте функцию getSameParity, которая принимает на вход массив чисел и возвращает новый, состоящий из элементов, у которых такая же чётность, как и у первого элемента входного массива.
Примеры
getSameParity([]); // []
getSameParity([1, 2, 3]); // [1, 3]
getSameParity([1, 2, 8]); // [1]
getSameParity([2, 2, 8]); // [2, 2, 8]

console.log(getSameParity([1, 2, 3])); // [1, 3]

function getSameParity(arr){
  const newArr = [];
  let s;
  if(arr[1] % 0 != 0){
    s = '!=';
  }else{
    s = '==';
  }

  for(let i = 0; i < arr.length; i += 1){
    if(arr[i] % 0 +`${s}`+ 0){
       newArr.push(arr[i]);
    }
  }
  return newArr;
}

У меня весь массив возвращается. Почему?
  • Вопрос задан
  • 1243 просмотра
Решения вопроса 1
@dimoff66
Кратко о себе: Я есть
Потому что эта строчка не имеет ни малейшего смысла
arr[i] % 0 +`${s}`+ 0
Во первых вы пытаетесь получить остаток от деления на нуль вместо двойки, во вторых вы составляете строку, а строка это всегда true, Поэтому все возвращается.
Я понимаю что вы хотите сделать, но это код, вы не можете составлять код на лету, правильный подход

function getSameParity(arr){
  const newArr = [];
  let s = arr[0] % 2;

  for(let i = 0; i < arr.length; i += 1){
    if(arr[i] % 2 === s){
       newArr.push(arr[i]);
    }
  }
  return newArr;
}

console.log(getSameParity([3, 6, 7, 8])) // [3, 7]
console.log(getSameParity([4, 6, 7, 8])) // [4, 6, 8]


либо короче

const getSameParity = arr => arr.filter(v => v % 2 === arr[0] % 2)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@psytonik
тут проблема в том что если числа в массиве будут отрицательные то не сильно это правильный ответ
[1, 2, -3] должен вернуть [1, -3]
[-3, 2, 1] должен вернуть [-3, 1]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы