使用javascript数组重新调用和消除数字间隙

使用javascript数组重新调用和消除数字间隙,javascript,Javascript,我试图在这个JavaScript数组中使用sortOrder属性,然后消除数字上的任何空白 例如: 应输出到: 下面是它应该运行的函数。我不知道如何消除数字上的差距 function restackSortOrder(p) { //Remove any gaps in numbers here while still retaining any duplicate numbers (which should stay grouped together). return p;

我试图在这个JavaScript数组中使用sortOrder属性,然后消除数字上的任何空白

例如:

应输出到:

下面是它应该运行的函数。我不知道如何消除数字上的差距

function restackSortOrder(p) {

    //Remove any gaps in numbers here while still retaining any duplicate numbers (which should stay grouped together).

    return p;
}

下面是一个解决方案,在评论中有解释:

stackorder函数{ var match=p.mapfunctione{//创建排序器值数组 返回e.sortOrder; } .sortfunctiona,b{返回a-b}//对数组进行数字排序 .FilterFunction,idx,数组{//筛选出重复项 返回e!==数组[idx-1]; }; p、 ForEachFunction{//查找排序器在匹配数组中的位置 e、 sortOrder=match.indexOfe.sortOrder+1; }; }//stackorder var p=[ {排序器:2}, {排序者:12}, {排序器:4}, {排序者:8}, {排序者:6}, {排序器:2}, {排序器:8} ]; 奥德普酒店;
console.logJSON.stringifyp ES6版本,首先使用集合获取唯一项,然后使用映射将原始值映射到集合的索引:

设p=[{sortOrder:2},{sortOrder:12},{sortOrder:4},{sortOrder:8},{sortOrder:6},{sortOrder:2},{sortOrder:8}]; 让map=newmap[…new Setp.mapo=>o.sortOrder].sorta,b=>a-b.mapsO,ind=>[sO,ind+1]; p的福勒特o o、 sortOrder=map.geto.sortOrder;
console.logJSON.stringifyp;这里的间隔意味着什么?有一个排序顺序,我不能让数字跳过sortOrder属性中的数字。因此,如果数组中有两个对象:p[0]。sortOrder=1和p[1]。sortOrder=3,则需要将3转换为2,这样就没有数字间隙。
p[0].sortOrder = 1; //used to be 2
p[1].sortOrder = 5; //used to be 12
p[2].sortOrder = 2; //used to be 4
p[3].sortOrder = 4; //used to be 8
p[4].sortOrder = 3; //used to be 6 
p[5].sortOrder = 1; //used to be 2
p[6].sortOrder = 4; //used to be 8   
function restackSortOrder(p) {

    //Remove any gaps in numbers here while still retaining any duplicate numbers (which should stay grouped together).

    return p;
}