我有一个多维数组
array = [];
array[0] = [1,3,8,4,9,5];
array[1] = [5,9,4,2,9,3,0];
array[2] = [5,2,6,1,3,8,4,9,5,17,2,9,3,0];
array[3] = [-1,0,20,6];
我想对它进行排序以获得此结果
[
[-1,0,0,0,1,1],
[2,2,2,3,3,3,3],
[4,4,4,5,5,5,5,6,6,8,8,9,9,9],
[9,9,17,20]
]
我已经定义了这个帮助我得到这个结果的函数
Array.prototype.sort_multi = function()
{
var arr = [];
this.forEach(function(element_arr,index_arr,array_arr)
{
element_arr.forEach(function(element,index,array)
{
arr.push(element);
});
});
arr.sort(function (a, b) { return a - b;});
this.forEach(function(element_arr,index_arr,array_arr)
{
element_arr.forEach(function(element,index,array)
{
array_arr[index_arr][index] = arr.shift();
});
});
return this;
}
我的问题是:有一种简单的方法吗?例如使用函数sort
或简单算法......?
答案 0 :(得分:4)
sort_multi()
的略微简化(效率稍高)版本:
基本上这里发生的是:
为什么这比原始代码更有效:
concat()
。splice()
。Array.prototype.sort_multi = function() {
var joined = [], lens = [], result = [];
this.forEach(function(item) {
joined = joined.concat(item);
lens.push(item.length); // store the initial lengths
});
joined = joined.sort(function (a, b) { return a - b;}); // sort numerically
lens.forEach(function(item) { // for each length in lens
result.push(joined.splice(0, item));
});
return result;
}