我在申请条件后申请返回数组时遇到问题。
在这里,
对于给定的数组:[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的第一周,希望你们中的一些能给我一个启发!
非常感谢
答案 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中,我们通常使用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]
答案 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);
}