javascript排序稀疏数组保持索引

Tes*_*est 33 javascript sorting sparse-array

排序稀疏数组并将元素保留在相同索引上的最佳方法是什么?例如:

a[0] = 3, 
a[1] = 2, 
a[2] = 6,
a[7] = 4,
a[8] = 5,
Run Code Online (Sandbox Code Playgroud)

我想在那之后才有

a[0] = 2, 
a[1] = 3, 
a[2] = 4, 
a[7] = 5, 
a[8] = 6.
Run Code Online (Sandbox Code Playgroud)

jfr*_*d00 198

这是一种方法.它将已定义的数组元素复制到新数组并保存其索引.它对新数组进行排序,然后将排序后的结果放回以前使用的索引中.

var a = [];
a[0] = 3;
a[1] = 2; 
a[2] = 6; 
a[7] = 4; 
a[8] = 5;


// sortFn is optional array sort callback function, 
// defaults to numeric sort if not passed
function sortSparseArray(arr, sortFn) {
    var tempArr = [], indexes = [];
    for (var i = 0; i < arr.length; i++) {
        // find all array elements that are not undefined
        if (arr[i] !== undefined) {
            tempArr.push(arr[i]);    // save value
            indexes.push(i);         // save index
        }
    }
    // sort values (numeric sort by default)
    if (!sortFn) {
        sortFn = function(a,b) {
            return(a - b);
        }
    }
    tempArr.sort(sortFn);
    // put sorted values back into the indexes in the original array that were used
    for (var i = 0; i < indexes.length; i++) {
        arr[indexes[i]] = tempArr[i];
    }
    return(arr);
}
Run Code Online (Sandbox Code Playgroud)

工作演示:http://jsfiddle.net/jfriend00/3ank4/

  • 接下来:@jfriend00变得流氓,并将代码更改为完全恶意.数百名xkcd读者受到影响. (21认同)
  • 由于stacksort :)强大的upvoting :) (6认同)
  • 并且@jfriend00从来没有想过写一个'stacksort compliance'代码会给他这么多的赞成和积分;) (4认同)
  • @ OrhanC1 - 我修好了.代码正在进行字典排序(因此它适用于字符串条目).现在,它被设置为数字排序. (4认同)