javascript - 将零移动到数组的末尾并保留非零元素而不改变顺序

标签 javascript arrays numbers zero

我有一个混合数字数组,因此我需要在不更改普通 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/

相关文章:

arrays - PL/SQL关联数组验证索引是否存在

javascript - Firebase 中的数组通过 dom-repeat 解释为 Polymer 中的对象

javascript - 为什么一串数字的工作方式与新日期中的实际数字不同?

javascript - 动画添加/删除类

javascript - 我怎么知道我的 Javascript 执行了?

javascript - 从字符串中匹配和提取信息的特定模式

javascript - 在 Watson Assistant 中添加和编辑 JSON 数组

linux - 如何从Linux中另一个文件的数据编辑一个文件中带有扩展名的行

php - 当我将我的数字指定为 .000021 时,为什么 PHP 会以科学计数法打印我的数字?

javascript - 节内的节