我目前正在学习如何使用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]));
我希望我能用最小的内存分配和运行时间来解决同一问题的建议。
答案 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);