Может кто-нибудь, пожалуйста, скажите мне, где я ошибся?

#javascript

#javascript

Вопрос:

Вопрос: Очень странно

Напишите функцию, veryOdd. Функция принимает массив чисел. Он должен вернуть новый массив, содержащий только нечетные числа из данного массива. veryOdd не должен изменять данный массив.

Мой код

 function veryOdd(array) {
  let newArray = array.slice();
  for (let i = 0; i < newArray.length; i  ) {
    let number = newArray[i];
    if (number % 2 === 1) {
      newArray.push(number);
    }
  }
  return newArray;
}
 

Комментарии:

1. let newArray = array.slice(); <— итак, вы создаете копию массива и продолжаете нажимать до конца этого…. Теперь вы видите свою проблему? Объявите новый массив, выполните цикл по исходному массиву.

2. @Nonik это не имеет никакого отношения к проблеме.

3. Array.filter() создает копию и, похоже, это то, что нужно. array.filter(num => num % 2 === 1)

4. В будущем было бы полезно опубликовать некоторые примеры выходных данных из программы. Вы получаете сообщение об ошибке? Возвращает ли код неправильные результаты? Трудно сказать, если каждый из нас не запускает код самостоятельно. Сэкономьте миру немного времени, опубликовав свой вывод 🙂

Ответ №1:

Как указано в комментариях, вы нажимаете на конец массива, который вы перебираете, и цикл никогда не завершится.

Но есть гораздо более простое решение: Array.prototype.filter

Метод filter() создает новый массив со всеми элементами, которые проходят тест, реализованный предоставленной функцией.

 function veryOdd(a) {
  return a.filter(x => x % 2 !== 0)
}
const x = [1, 2, 3, 4, 5, 6, 7];
const y = veryOdd(x);
console.log(x);
console.log(y); 

Ответ №2:

Посмотрите, как он вернет ожидаемый результат.

 let array = [];
for(let i = 0; i < 12; i  )
{
  array.push(i);
}


function veryOdd(array) {
  let newArray = []; // create a new array to push the required elements to
  for (let i = 0; i < array.length; i  ) { // use the param array 
    let number = array[i]; // use the param array
    if (number % 2 === 1) {
      newArray.push(number); // Add the required elements to the new array
    }
  }
  return newArray;
}

console.log(veryOdd(array)); 

Ответ №3:

Я предполагаю, что это то, что вы хотите:

  • Назначьте новый (пустой) массив ‘newArray’
  • Назначьте текущий элемент из исходного «массива»
  • Измените проверку результата модуля на значение Не-0
 function veryOdd(array) {

  let newArray = [ ];

  for (let i = 0; i < array.length; i   ) {

    let number = array[i];

    if ((number % 2) !== 0) {
      newArray.push(number);
    }
  }

  return newArray;
}

let res = veryOdd([ 1, 2, 3, 4 ]);

console.log(res.length);

console.log(res);