我在应用条件后应用于返回数组时遇到问题。
这里是,
给定数组:[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的第一周,我希望你们中的一些人能够对我有所了解!
非常感谢
使用.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;
}
}
当然,这假设原始数组中的每个项都是整数。
在做[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
}
在JavaScript中我们通常使用map
,filter
和reduce
以功能方式解决这类问题
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]
你可以使用一个简单的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);
这是您修改自己的代码的方法:
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
如果要在函数中传递数组: -
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);
}