使用javascript对数组进行排序而不改变空或空的地方

Posted

技术标签:

【中文标题】使用javascript对数组进行排序而不改变空或空的地方【英文标题】:sort array without altering null or empty places using javascript 【发布时间】:2020-08-09 10:26:26 【问题描述】:

我有一些长度相等的数组,并且每个数组的随机位置都有四个空值,我需要对这些数字数组进行排序,前提是空值的位置没有改变。

例如,我的数组:

var arr1 = [6, 3, null, 5, null, 4, null, null];
var arr2 = [null, 7, 4, null, 6, null, 5, null];

预期的输出应该是:(不改变空位置)

var arr1 = [3, 4, null, 5, null, 6, null, null];
var arr2 = [null, 4, 5, null, 6, null, 7, null];

请帮助建议或建议以下函数中的一些代码,以便在 javascript 中实现此要求

function sortByNotalterNull(arr) 

 //somecode here

 return arr;
;
sortByNotalterNull(arr1);

【问题讨论】:

【参考方案1】:

您可以将一个辅助数组用于非 null 索引,另一个用于数字,对它们进行排序并将它们应用回原始数组的先前存储的索引。

const sort = array => 
        let indices = [];

        array
            .filter((v, i) => v !== null && indices.push(i))
            .sort((a, b) => a - b)
            .forEach((v, i) => array[indices[i]] = v);
        return array;
    ;

console.log(...sort([6, 3, null, 5, null, 4, null, null]));
console.log(...sort([null, 7, 4, null, 6, null, 5, null]));

【讨论】:

以上是关于使用javascript对数组进行排序而不改变空或空的地方的主要内容,如果未能解决你的问题,请参考以下文章

javascript深度理解数组的sort()排序

在 nlog(n) 时间内对整数数组进行排序而不使用比较运算符

Javascript中的反向数组而不改变原始数组

是否可以对数组进行排序并仅获得展示位置的返回而不更改顺序

使用 JavaScript reduce 函数对数组进行排序

Javascript使用优先级数组对对象数组进行排序