我正在尝试编写一个包含两个参数a和b的代码(函数),如果a大于b,则返回a和b之间的所有偶数,否则应返回a和b之间的奇数。
这是我的代码。
function number_ranges (a, b) {
let numbers = [];
if (a > b){
for (let i = b; i < a; i++){
if (i > b){
numbers.push(i);
}
}
}else{
for (let i = a; i < b; i++){
if (i > a){
numbers.push(i);
}
}
}
const result = numbers.filter(function(num){
return a > b ? num % 2 === 0: num % 2 === 1;
});
return result;
}
我想看到一种不同的方法,因为我似乎无法通过所有测试用例
答案 0 :(得分:1)
我使用了此功能f=(a,b)=>[...ArrayMath.max(a,b))].map((q,i)=>i).filter(z=>(a<b?!(z%2):z%2)&&z>=Math.min(a,b))
我首先创建一个从1到b
的范围,如下[...Array(Math.max(a,b))].map((q,i)=>i)
然后我用a<b?!(z%2):z%2
进行过滤。如果大于b,则a保持偶数,否则保持几率。
我还使用&&z>=Math.min(a,b)
f=(a,b)=>[...Array(Math.max(a,b))].map((q,i)=>i).filter(z=>(a<b?!(z%2):z%2)&&z>=Math.min(a,b))
console.log(f(10, 5))
console.log(f(5, 10))
答案 1 :(得分:1)
您可以执行一个单循环并检查该值是否为偶数,或与该订单的检查相结合。
function getEvenOdd(a, b) {
var inc = +(a < b) || -1,
i,
result = [];
for (i = a; i !== b + inc; i += inc) {
if (+(inc === 1) !== i % 2) {
result.push(i);
}
}
return result;
}
// even
console.log(getEvenOdd(3, 10).join(' ')); // [4, 6, 8, 10]
console.log(getEvenOdd(4, 10).join(' ')); // [4, 6, 8, 10]
console.log(getEvenOdd(3, 9).join(' ')); // [4, 6, 8]
console.log(getEvenOdd(4, 9).join(' ')); // [4, 6, 8]
// odd
console.log(getEvenOdd(10, 3).join(' ')); // [9, 7, 5, 3]
console.log(getEvenOdd(10, 4).join(' ')); // [9, 7, 5]
console.log(getEvenOdd(9, 3).join(' ')); // [9, 7, 5, 3]
console.log(getEvenOdd(9, 4).join(' ')); // [9, 7, 5]