对特定元素排序而不重新排序其他元素



所以我试着写一行来排序数组,我只是把所有的零推到数组的末尾。这是我的代码:

const arr = [ 9, 0, 0, 9, 1, 2, 0, 1, 0, 1, 0, 3, 0, 1, 9, 0, 0, 0, 0, 9 ];
arr.sort((a,b) => (a === 0 && b !== 0) ? 1 : (b === 0 && a !== 0) ? -1 : 0);
console.log(`[${arr.join(', ')}]`);
// [9, 9, 1, 2, 1, 1, 3, 1, 9, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

然而,对于数组

,这段代码似乎也以某种方式对其他元素排序。我希望[9,9,1,2,1,1,3,1,9,9,0,0,0,0,0,0,0,0,0,0]但是我得到了[9,9,9,9,1,2,1,1,3,1,0,0,0,0,0,0,0,0,0,0]有线索吗?

我得到了你期望的结果。但是你也可以使用filter,因为它返回一个新的数组。将第一个(不含零)与第二个(仅含零)连接。

let arr = [ 9, 0, 0, 9, 1, 2, 0, 1, 0, 1, 0, 3, 0, 1, 9, 0, 0, 0, 0, 9 ];
arr = arr.filter(a => a !== 0).concat(arr.filter(a => a === 0));
console.log(arr);

差不多一行…排序的。使用临时数组来存储零

let n = [9, 0, 0, 9, 1, 2, 0, 1, 0, 1, 0, 3, 0, 1, 9, 0, 0, 0, 0, 9]
let c = [], newn = n.filter(e => (e === 0 && c.push(e)) ? false : true).concat(c)
console.log(newn)

最新更新