按另一个数组中指定的索引排序数组,最佳算法

Sort array by index which specified in another array, best algorithm

本文关键字:数组 排序 最佳 索引 算法 另一个      更新时间:2023-09-26

我有一个难题,

输入

var a = ['a', 'b', 'c', 'd'],
    b = [1, 0, 3, 2];

输出
['b', 'a', 'd', 'c']

我的解是这样的

function _sort(array, rules) {
  var i, len = rules.length, res = []
  if (array.length !== len) {
    return null; 
  }
  for (i = 0; i < len; i++) {
    res[rules[i]] = array[i];
  }
  return res;
}

如何改进这个算法?

你可以这样做:

var a = ['a', 'b', 'c', 'd'],
    b = [1, 0, 3, 2];
function mySort(array, rules) {
    var sorted = [];
    for (var i=0; i< rules.length; i++) {
        sorted[rules[i]] = array[i];
    }
    return sorted;
}
mySort(a, b);
> ["b", "a", "d", "c"]

如果您将其转换为数组的数组([[1,'a'],[0,'b'],[3,'c'],[2,'d']]),这应该不难,然后您可以调用Javascript的内置array.sort()方法对其进行排序。

纯JS解决方案

var result = b.map(function(idx) { 
    return a[idx]; 
});

我会使用lodash或下划线之类的库

var result = _.map(b, function(idx) {
    return a[idx];
});

我还会注意到,在一个相当大的数据集上运行基准测试通常会更好。运行基准测试时存在开销,并且随着数据变大,这种开销对结果的影响越小。