如何在不排序的情况下将数组末尾的特定元素移位



我试图移动数组元素,只要在数组中找到它,它的末尾就包含0个元素。所以,我有下面的数组,只是想知道如何在不排序元素的情况下,在最后移动所有0个元素。非零元素顺序不应受到影响。我能够使用排序方法在末尾放置0个元素,但无法使用其他解决方案来实现以下预期输出。

有人能研究一下我们是如何获得预期输出的吗?

样本阵列

const arr = [4,5,1,0,3,8,0,9,2,0,4]

预期输出

const arr = [4,5,1,3,8,9,2,4,0,0,0]

您可以执行2个filter

const arr = [4, 5, 1, 0, 3, 8, 0, 9, 2, 0, 4]
const specificElement = 0
const res = [
arr.filter(el => el !== specificElement),
arr.filter(el => el === specificElement),
].flat()
console.log(res)

或1filter

const arr = [4, 5, 1, 0, 3, 8, 0, 9, 2, 0, 4]
const specificElement = 0
let res = arr.filter(el => el !== specificElement)
res = res.concat(Array(arr.length - res.length).fill(specificElement))
console.log(res)

一个非常简单的方法是创建一个新的空数组,然后从头到尾循环数据,根据它是0,将每个元素放在新数组的开头(用unshift(还是结尾(push(。

const arr = [4, 5, 1, 0, 3, 8, 0, 9, 2, 0, 4];
const result = [];
for (let i = arr.length-1; i >= 0; i--) {
if (arr[i] === 0) {
result.push(arr[i]);
} else {
result.unshift(arr[i]);
}
}
console.log(result);

最新更新