一个含有奇数和偶数的数组,在js中如何对它进行排序,使得其中奇数升序,偶数还在原来的位置?

思路:我们可以返回数组array中的奇数,形成一个新的奇数odd数组(利用filter()返回),同时在建立一个位置place数组来保存每个奇数的位置。然后对奇数odd数组进行排序,再根据位置place数组中每个元素的值,把排序完以后的odd数组中的元素重新添加到数组array中。

 function sortArry(array) {
      //构建一个保存奇数位置的数组
      var place = new Array();
      //返回数组中的奇数,构成一个新的数组
      var odd = array.filter(function (item, index, array) {
        if (item % 2 != 0) {
          place.push(index);
          return item;
        }
      });
      //对奇数数组进行排序(冒泡排序)
      for (var i = 0; i < odd.length - 1; i++) {
        for (var j = 0; j < odd.length - i - 1; j++) {

          if (odd[j] > odd[j + 1]) {
            var temp;
            temp = odd[j];
            odd[j] = odd[j + 1];
            odd[j + 1] = temp;
          }
        }
      }
      //根据place数组,把拍好的奇数数组放入原数组中
      for (var t = 0; t < odd.length; t++) {
        array[place[t]] = odd[t];
      }
      //返回数组
      return array;
    }
    console.log(sortArry([5, 3, 2, 8, 1, 4])); // 结果: [ 1, 3, 2, 8, 5, 4 ]

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值