如何将数组中的元素按顺序和偶数排序,并且它们应该按升序排列

时间:2018-06-21 10:01:04

标签: javascript arrays sorting

我目前正在学习如何使用javascript编程,我遇到了一个问题(写函数,该函数先对数组进行奇数排序,然后对偶数排序 // sortArray([3,24,1,4,9,10])=> [1,3,9,4,10,24] // sortArray([2,1,4,9,3,3,10,12])=> [1,3,3,9,2,4,10,12]),我已经实现了一个解决方案排序功能和多个变量。参见下面的代码;

  function sortingArr (array) {
    let sortedArr = (array.sort(function(a, b) { return a - b; })), oddArr = [], evenArr = [];
    for (i = 0; i < array.length; i++){
        if (sortedArr[i] % 2 == 0){
            evenArr.push(sortedArr[i]);
        }
        else {
            oddArr.push(sortedArr[i]);
        }
    }
    return oddArr.concat(evenArr);
}
console.log (sortingArr ([2,1,4,9,3,3,10,12]));

我希望我能用最小的内存分配和运行时间来解决同一问题的建议。

3 个答案:

答案 0 :(得分:3)

在模数2小于“ b”的'a'上排序
或“ a”大于“ b”。

 import './index.css';
 class NameForm extends React.Component {
   constructor(props) {
      super(props);
      this.state = {fontFamilyName: ''};

      this.handleChange = this.handleChange.bind(this);
   }
    handleChange(event) { 
     this.setState({fontFamilyName: event.target.value});
    } 
    render() { 
      return ( 
            <div> 
                <select onChange={this.handleChange}>
                   <option value='Arial'>Arial</option>
                   <option value='Bauhaus'>Bauhaus</option>
                   <option value='Times New Roman'>Times New Roman</option> 
                </select> 
                <p style={{fontFamily:this.state.fontFamilyName}}>Some Text here</p>
            </div> ); 
     }
   }

模数2对于偶数只能为0,对于不均匀模数只能为1。

因此,当a%2 == 0(偶数)和b%2 == 1(不均匀)时,则将'a'放在'b'之后。
当a%2等于b%2时,大小决定哪个先出现。

答案 1 :(得分:1)

您可以使用一组对偶数和奇数进行排序,然后使用链接方法按值排序。

function sort(array) {
    return array.sort((a, b) => b % 2 - a % 2 || a - b)
}

console.log(sort([3, 24, 1, 4, 9, 10]));
console.log(sort([2, 1, 4, 9, 3, 3, 10, 12]));
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:0)

将您自己的比较函数传递给sort

const sorted = [2,1,4,9,3,3,10,12].sort((a, b) => {
    if(a % 2 === 1 && b % 2 === 1) return a - b;
    if(a % 2 === 1) return -1;
    if(b % 2 === 1) return 1;
    return a - b
})
console.log(sorted);