按另一个数组中指定的索引排序数组,最佳算法
Sort array by index which specified in another array, best 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;
}
如何改进这个算法?
你可以这样做:
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];
});
我还会注意到,在一个相当大的数据集上运行基准测试通常会更好。运行基准测试时存在开销,并且随着数据变大,这种开销对结果的影响越小。
相关文章:
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- Javascript中的多维数组排序索引问题
- 如何按日期对Javascript对象数组排序
- 数组排序后显示更改
- 当许多元素相等时,Javascript数组排序无法正常工作
- Javascript数组排序速度受字符串长度的影响
- 按唯一键将对象数组排序为数组
- 以 js 为单位的数组排序
- js 数组排序无法正常工作
- 数组排序.论点从何而来
- 不需要的数组排序
- 数组排序不正确/不可预测,使用 indexOf 时
- Javascript将数组排序到树中
- 随后的多维数组排序会产生意外的结果
- 数组排序基于纯javascript搜索文本匹配
- Javascript自定义数组按数组排序
- 使用字符串按属性错误对对象进行数组排序
- 多维数组排序
- JavaScript与PHP在数组排序中的对比
- Javascript-关联数组排序