我有一个混合数字数组,因此我需要在不更改普通 JAVASCRIPT 中非零数字顺序的情况下将零编号移动到末尾。
注意:这需要在不创建新数组的情况下处理。
例如:
inp_arr = [12,5,0,78,94,0,34,0,67];
预期输出:
[12,5,78,94,34,67,0,0,0];
我的实现方式:
function sortArray(inputArray){
let non_zeroArray = []
let zero_Array = [];
inputArray.map(item => {
item != 0 ? non_zeroArray.push(item) : zero_Array.push(item)
});
return non_zeroArray.concat(zero_Array)
}
console.log(
sortArray([32, 0, 12, 78, 0, 56, 0, 87, 0])
)
最佳答案
无论如何,您的解决方案非常好,因为它具有线性 O(n)
复杂度。
因此,您不是对元素进行排序,而是过滤掉源数组,然后在末尾压入零。
为了提高可读性,您可以使用 native 过滤器方法。
如果出于某种原因您需要移动其他值,您可以使用该方法的第二个参数。
此外,您可能会在迭代期间推迟将零插入数组。 只是将它们加起来并在最后组成数组。
const moveValueAtEnd = (arr, value) => {
let counter = 0;
return arr.filter((val) => {
const match = val === value;
enter code here
// in js, boolean is casted to 0 or 1 when using arithmetic operation
counter += match;
return !match;
}).concat(Array(counter).fill(value))
}
关于javascript - 将零移动到数组的末尾并保留非零元素而不改变顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58067831/