javascript排序稀疏数组保持索引

标签 javascript sorting sparse-array

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

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

我想排序后有

a[0] = 2, 
a[1] = 3, 
a[2] = 4, 
a[7] = 5, 
a[8] = 6.

最佳答案

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

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);
}

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

关于javascript排序稀疏数组保持索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12137690/

相关文章:

c++ - 表示稀疏张量的数据结构?

javascript - 修改 jQuery ajax 请求连接头

javascript - React Material UI Drawer - 警告列表中的每个 child 都应该有一个唯一的 "key" Prop

java - 错误: Out of bounds Java Bubble sort

arrays - 算法:如何对具有空间约束的矩阵元素进行排序

r - dplyr排列-按另一列对组进行排序,然后在每个组内进行排序

javascript - 获取稀疏 JavaScript 数组的第一个元素

javascript - 在 JavaScript 中获取元素 ID 和通用元素

javascript - Node.js/Express - 如何在 JavaScript 中访问 'req'

wolfram-mathematica - 在Mathematica中对稀疏数组的有效替代(Outer)吗?