怎么用js写一段代码,求一个数组中的最大奇数和最小偶数,并返回他们的和,如果一个数不存在则返回null。

想了好久,大概思路懂,但就是写不出来不会写呀。哪个大神能写一下让我参考一下。

我写了一个便于理解的算法,只要进行一次循环,不用排序。请参考:

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;
  }
}

追问

哦哦你已经用alert了

温馨提示:答案为网友推荐,仅供参考
第1个回答  2017-04-14
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;
    }
}

追问

数组这样定义对吧 var arr=new Array(5,9,3,5,2,1,8,;6);

追答

数组可以直接 var arr = [1,2,3,4,5,6];
也可以 var arr = new Array(); arr.push(xx) arr[0] = xx
就是不能用你这种, 构造方法接收的参数是数组的原始长度,你传入了好多参数,其实后面的参数都没用了,你这个例子 相当于就是new Array(5);
arr的length会是5 但是内容是undefined arr[5]也是undefined,不过是真的没有定义,0~4的undefined是本该有值 还没有定义

追问

好详细!太感谢了,还有最后一个问题,怎么打印结果

追答

如果是浏览器 你就alert(test([1,2,3,4,5,6,7]))

如果是控制台 你可以吧alert()改成 console.log()

另外下面一个朋友指出我负数的bug

我改一下:

function test(arr) {
    //先排序
    arr.sort(function (value1, value2) {
        return value1 - value2;
    });
    //取出偶数和奇数数组
    var even = arr.filter(function (item) {
        return item % 2 == 0 || -item % 2 == 0;
    })
    var odd = arr.filter(function (item) {
        return item % 2 == 1 || -item % 2 == 1;
    })
    if (even.length > 0 && odd.length > 0) {
        return even.shift() + odd.pop();
    } else {
        return null;
    }
}

相似回答