将条件套用至阵列

时间:2019-04-04 07:07:19

标签: javascript arrays function

我在申请条件后申请返回数组时遇到问题。

在这里,

对于给定的数组:[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 个答案:

答案 0 :(得分:3)

使用.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 :(得分: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
     }

答案 2 :(得分:0)

在JavaScript中,我们通常使用mapfilterreduce功能性方式

解决此类问题
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]

答案 3 :(得分: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);

答案 4 :(得分: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

答案 5 :(得分: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);
    }