Применение условий к массиву - PullRequest
0 голосов
/ 04 апреля 2019

У меня проблема с применением возврата массива после применения условия.

Вот оно,

С данным массивом: [1, 2, 3]

Условие 1: Если это нечетное число, следует умножить * 2.

Условие 2: Если это четное, просто верните его.

Ожидаемый_Результат: [2, 2, 6]

Вот мой подход;

function oddToEven(array) {

  var evens = [array];

  var odds = [array];


 if (array %2 !== 0){

    array *2;

    return odds;

   } else {

     return evens;

  }

  }

  oddToEven(1,2,3); // returns => [1]

Я знаю, это довольно просто, и, конечно, мой подход неверен, но это моя первая неделя изучения JS, я надеюсь, что некоторые из вас дадут мне представление об этом!

Большое спасибо

Ответы [ 6 ]

2 голосов
/ 04 апреля 2019

Используйте .map для преобразования одного массива в другой - то, что возвращается при каждом вызове функции обратного вызова, будет элементом с тем же индексом в новом массиве:

const oddToEven = array => array.map(
  num => num % 2 === 1 ? num * 2 : num
);
console.log(oddToEven([1, 2, 3]))

Или, чтобы быть более многословным:

function oddToEven(array) {
  return array.map(function(num) {
    if (num % 2 === 1) // Odd
      return num * 2;
    else // Even (or not an integer)
      return num;
  }
}

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

1 голос
/ 04 апреля 2019

Когда вы делаете [array], вы в основном оборачиваете массив в другой массив, вам, вероятно, не нужно [[1, 2, 3]].Чтобы скопировать массив, используйте [...array], однако, вам действительно нужно три массива?Разве этого не достаточно, чтобы просмотреть пройденный массив и изменить его в соответствии с правилами?Для этого нам нужно просмотреть индексы массива:

function oddToEven(array) {
  for(let i = 0; i < array.length; i++) {
    //...
  }

  return array;
}

Теперь внутри этого цикла вы можете получить текущий элемент с помощью array[i], а также изменить его с помощью array[i] = ? ... Выможно также проверить, если это даже с

     if(array[i] % 2 === 0) {
       // todo
     } else {
       // todo
     }
0 голосов
/ 04 апреля 2019

Если вы хотите передать массив в функцию: -

     function oddToEven(array) {
      var i;
      var filalOutput = [];
        for (i=0;i<array.length;i++){
          var x = array [i]
          if(x%2==0)
              filalOutput.push(x);
          else{
              filalOutput.push(x*2);
          }
      }

        return filalOutput
    }
    {
      var array1=[];
      const args = [1, 2, 3];
      array1=oddToEven( args);
      console.log(array1);
    }
0 голосов
/ 04 апреля 2019

Вот как вы можете изменить свой собственный код:

 function oddToEven(arr) {

     return arr.map(function(num){
         return num % 2 === 1 ? num * 2 : num
     });

 }

oddToEven([1,2,3]); // here you need to send the array, not 1, 2, 3
0 голосов
/ 04 апреля 2019

Для этого можно использовать простой цикл forEach():

var arr = [1, 2, 3, 4, 5, 6, 7];
var res = [];
arr.forEach(function(val){
  if(val % 2 === 0){
   res.push(val); 
  } else {
   res.push(val*2);
  }
});
console.log(res);
0 голосов
/ 04 апреля 2019

В JavaScript мы обычно используем map, filter и reduce, чтобы решить эту проблему функциональным способом

function oddToEven(array) {
    return array.map(n => (n % 2 === 1 ? n * 2 : n));
}

Обратите внимание, что карта поместитновый массив, так что ваш исходный массив останется прежним.Использование:

const originalArray = [1,2,3,4];
const convertedArray = oddToEven(originalArray);
// origianlArray is [1,2,3,4]
// convertedArray is [2,2,6,4]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...