有這個陣列:
const myArry = [1, 543, 0, 232, 1, 45654, -5, 0, 7, 4, 0, 43, 77, 0, 77, 0]
它必須按升序排序并將所有0s放在最后,所以輸出應該是:
[-5, 1, 1, 4, 7, 43, 77, 77, 232, 543, 45654, 0, 0, 0, 0, 0]
對于排序,它很簡單:
function sorting(arr) {
for(let i = 0; i< arr.length; i ) {
for (let j = 0; j < arr.length - i -1; j ) {
if(arr[j 1] < arr[j]) {
[arr[j 1], arr[j]]=[arr[j], arr[j 1]];
}
}
}
return arr;
}
但是對于移動那些0s,如果沒有本機功能,我無法找到解決方案,例如push:
function moveZeros(arr) {
let newArray = [];
let counter = 0;
for (let i = 0; i < arr.length; i ) {
if(arr[i] !== 0) {
newArray.push(arr[i]);
}
else { counter ; }
}
for (let j = 0; j < counter; j ) {
newArray.push(0);
}
return newArray;
}
有沒有辦法做到這一點?此外,如果將這兩種方法合二為一
uj5u.com熱心網友回復:
在對數字進行排序時,要將所有零移到末尾,您必須賦予它比任何其他數字更大的權重。在這里,我將零“邊緣化”以始終交換以使其移動到最后。
const myArry = [1, 543, 0, 232, 1, 45654, -5, 0, 7, 4, 0, 43, 77, 0, 77, 0]
function sorting(arr) {
for(let i = 0; i< arr.length; i ) {
for (let j = 0; j < arr.length - i -1; j ) {
if(arr[j 1] < arr[j] && arr[j 1] != 0 || arr[j] == 0) {
[arr[j 1], arr[j]]=[arr[j], arr[j 1]];
}
}
}
return arr;
}
console.log('' sorting(myArry))
uj5u.com熱心網友回復:
您可以使用該sort功能來完成。它的可讀性很強。
myArry.sort((a, b) => {
if(b === 0) return -Infinity;
if(a === 0) return Infinity;
return a -b
})
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/514799.html
上一篇:從陣列中洗掉所有不是數字的內容。為什么這不起作用?[復制]
下一篇:在大寫字母之前排序下劃線
