灵感来自@jwatts1980's answer和@Alexander's answer here我将这两个答案合并成一个快速和肮脏的解决方案; 主阵列是要排序的一个,剩下的只是遵循其指标
注意:非常非常大的阵列
/* @sort argument is the array that has the values to sort
@followers argument is an array of arrays which are all same length of 'sort'
all will be sorted accordingly
example:
sortMutipleArrays(
[0, 6, 7, 8, 3, 4, 9],
[ ["zr", "sx", "sv", "et", "th", "fr", "nn"],
["zero", "six", "seven", "eight", "three", "four", "nine"]
]
);
// Will return
{
sorted: [0, 3, 4, 6, 7, 8, 9],
followed: [
["zr", th, "fr", "sx", "sv", "et", "nn"],
["zero", "three", "four", "six", "seven", "eight", "nine"]
]
}
*/
你可能想改变方法签名/回报效率不高结构,但这应该很容易。我就是这么做的,因为我需要它
var sortMultipleArrays = function (sort, followers) {
var index = this.getSortedIndex(sort)
, followed = [];
followers.unshift(sort);
followers.forEach(function(arr){
var _arr = [];
for(var i = 0; i < arr.length; i++)
_arr[i] = arr[index[i]];
followed.push(_arr);
});
var result = {sorted: followed[0]};
followed.shift();
result.followed = followed;
return result;
};
var getSortedIndex = function (arr) {
var index = [];
for (var i = 0; i < arr.length; i++) {
index.push(i);
}
index = index.sort((function(arr){
/* this will sort ints in descending order, change it based on your needs */
return function (a, b) {return ((arr[a] > arr[b]) ? -1 : ((arr[a] < arr[b]) ? 1 : 0));
};
})(arr));
return index;
};
有没有改变你存储数据的方式的机会吗?为了嵌套数组或者对象 – zerkms 2012-07-16 06:44:59
我会做出一个很好的猜测,并且说你没有办法用你当前发布的代码来做到这一点。每个阵列都没有在其中存储足够的信息。任何给定点的名称数组不知道它是否已被更改,没有属性保存排序顺序或类似。 – 2012-07-16 06:48:50
[JavaScript:操作两个数组]的可能重复(http://stackoverflow.com/questions/8862220/javascript-manipulate-two-arrays) – 2012-07-16 06:50:13