javascript - 按降序對數字進行排序,但開頭應為0




arrays sorting (7)

也許這段代碼會為您提供幫助。

let arr = [0, 1, 0, 2, 0, 3, 0, 4, 0, 5];
let arr1 = arr.filter(item => item === 0);
let arr2 = arr.filter(item => item != 0);

arr2 = arr2.sort();
arr2 = arr2.reverse();

let result = [...arr1, ...arr2]

console.log(result);

我在JavaScript中遇到了一個挑戰,已經嘗試了一段時間。

考慮以下數組:

let arr = [0, 1, 0, 2, 0, 3, 0, 4, 0, 5];

我必須輸出以下結果:

arr = [0, 0, 0, 0, 0, 5, 4, 3, 2, 1]

我遵循以下邏輯行將零放置在前面,從而調整索引值:

arr.sort((x, y) => {
    if (x !== 0) {
        return 1;
    }

    if (x === 0) {
        return -1;
    }

    return y - x;
});

但是我被這個結果卡住了:

arr = [0, 0, 0, 0, 0, 1, 2, 3, 4, 5]

有沒有人有解決此問題的提示?


再次嘗試對數組進行排序:

let arr = [0, 1, 0, 2, 0, 3, 0, 4, 0, 5];

arr.sort((x, y) => {
    return y > x ? 1 : -1;
}).sort((x, y) => {
    if (x === 0) { return -1; } return 0;
})

在這裡不玩代碼高爾夫:

let arr = [0, 1, 0, 2, 0, 3, 0, 4, 0, 5, -1];
arr.sort(function(a, b) {
  if (a === 0 && b !== 0) {
    // a is zero b is nonzero, a goes first
    return -1;
  } else if (a !== 0 && b === 0) {
    // a is nonzero b is zero, b goes first
    return 1;
  } else {
    // both are zero or both are nonzero, sort descending
    return b - a;
  }
});
console.log(arr.toString());


如果已經存在,請不要編寫自己的數字排序。 您想要做的就是標題中所說的; 以降序對數字進行排序,但開頭應為零。

const zeroSort = arr => [...arr.filter(n => n == 0),
                         ...new Float64Array(arr.filter(n => n != 0)).sort().reverse()];

console.log(zeroSort([0, 1, 0, 2, 0, 3, 0, 4, 0, 500]));

不要編寫不需要的任何代碼; 您可能會弄錯。

根據您希望數組處理的數字類型選擇 TypedArray 。 Float64是一個很好的默認設置,因為它可以處理所有正常的JS數字。


您可以按 ba 的增量進行排序(用於降序排序),並採用 Number.MAX_VALUE 來獲取虛假值(例如零)。

這個:

Number.MAX_VALUE - Number.MAX_VALUE

等於零。

let array = [0, 1, 0, 2, 0, 3, 0, 4, 0, 5];

array.sort((a, b) => (b || Number.MAX_VALUE) - (a || Number.MAX_VALUE));

console.log(...array);


您可以這樣做:

let arr = [0, 1, 0, 2, 0, 3, 0, 4, 0, 5];

let result = arr.sort((a,b) => {
  if(a == 0 || b == 0)
    return a-b;
  return b-a;
})
console.log(result)

或者您可以這樣做:

let arr = [0, 1, 0, 2, 0, 3, 0, 4, 0, 5];

let result = arr.sort().sort((a,b) => {
  if(a > 0 && b > 0)
    return b-a
  return 0
})

console.log(result)


正如mdn docs所說:

如果a和b是要比較的兩個元素,則:

如果 compareFunction(a, b) 返回的值小於 0 ,則將 compareFunction(a, b) 排序 a 小於 b 的索引(即a排在最前面)。

如果 compareFunction(a, b) 返回0,則a和b彼此相對不變,但對所有不同元素進行排序。 注意:ECMAscript標準不保證此行為,因此,並非所有瀏覽器(例如​​,至少可追溯到2003年的Mozilla版本)都遵守此規定。

如果 compareFunction(a, b) 返回大於0,則將 compareFunction(a, b) 排序為小於a的索引(即 b 首先出現)。

當給定一對特定的元素 ab 作為其兩個參數時 compareFunction(a, b) 必須始終返回相同的值。 如果返回不一致的結果,則排序順序不確定。

因此,比較功能具有以下形式:

function compare(a, b) {
  if (a is less than b by some ordering criterion) {
    return -1;
  }
  if (a is greater than b by the ordering criterion) {
    return 1;
  }
  // a must be equal to b
  return 0;
}

let arr = [0, 1, 0, 2, 0, 3, 0, 4, 0, 5];

arr.sort((x, y) => {
    if (x > 0 && y > 0) {
        return y - x;
    }
    return x - y;
});

console.log(arr);







sorting