我写了一个便于理解的算法,只要进行一次循环,不用排序。请参考:
var arr = [1,3,5,7,9,2,4,6,8,10]; //定义一个数组
alert(func(arr)); //调用函数
function func(arr){
var odd = null, //odd是存放最大奇数的变量
even = null; //even是存放最小偶数的变量
//下面对数组元素进行循环判断
for(var n = 0; n < arr.length; n++){
//如果元素模2为0,则是偶数
if(arr[n] % 2 == 0){
//如果odd变量是null,或者当前元素大于odd
//则给odd变量值替换为当前元素
if(odd == null || arr[n] > odd){
odd = arr[n];
}
}
//同理,
//如果元素模2不为0,则是奇数
if(arr[n] % 2 != 0){
//如果even变量是null,或者当前元素小于even
//则给even变量值替换为当前元素
if(even == null || arr[n] < even){
even = arr[n];
}
}
}
//最后返回结果
if(odd != null && even != null){
return odd + even;
}else{
return null;
}
}
function test(arr) {
//先排序
arr.sort(function (value1, value2) {
return value1 - value2;
});
//取出偶数和奇数数组
var even = arr.filter(function (item) {
return item % 2 == 0;
})
var odd = arr.filter(function (item) {
return item % 2 == 1;
})
if (even.length > 0 && odd.length > 0) {
return even.shift() + odd.pop();
} else {
return null;
}
}