将条件应用于数组

问题描述 投票:0回答:6

我在应用条件后应用于返回数组时遇到问题。

这里是,

给定数组:[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的第一周,我希望你们中的一些人能够对我有所了解!

非常感谢

javascript arrays function
6个回答
2
投票

使用.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
投票

在做[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
投票

在JavaScript中我们通常使用mapfilterreduce以功能方式解决这类问题

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

请注意,map将创建一个新数组,以便原始数组保持不变。用法:

const originalArray = [1,2,3,4];
const convertedArray = oddToEven(originalArray);
// origianlArray is [1,2,3,4]
// convertedArray is [2,2,6,4]

0
投票

你可以使用一个简单的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
投票

这是您修改自己的代码的方法:

 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
投票

如果要在函数中传递数组: -

     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);
    }
© www.soinside.com 2019 - 2024. All rights reserved.