按索引对数组进行排序,在另一个数组中指定,最佳算法

时间:2014-08-04 17:31:51

标签: javascript algorithm

我有一个谜题,

输入

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

如何改进此算法?

3 个答案:

答案 0 :(得分:1)

你可以这样做:

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 :(得分:0)

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

答案 2 :(得分:0)

纯JS解决方案

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

我会使用像lodash或下划线这样的库

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

我还要注意,在相当大的数据集上运行基准测试通常会更好。运行基准测试时会产生开销,随着数据变大,这种开销会影响结果。