我有一个谜题,
输入
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;
}
如何改进此算法?
答案 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];
});
我还要注意,在相当大的数据集上运行基准测试通常会更好。运行基准测试时会产生开销,随着数据变大,这种开销会影响结果。