使用此数组:
var arr = [];
arr[0] = [1, 'Peter', 3];
arr[1] = [1, 'Mary', 2];
arr[2] = [0, 'David', 5];
arr[3] = [0, 'John', 4];
arr[4] = [0, 'Billy', 1];
这很好用:
arr.sort(function (a,b) {
console.log(a[2]);
if (a[2] > b[2]) return 1;
if (a[2] < b[2]) return -1;
return 0;
});
但是有这样的数组:
var arr = [];
arr[0] = [1, 1, 0, 0, 0];
arr[1] = ['Peter', 'Mary', 'David', 'John', 'Billy'];
arr[2] = [3, 2, 5, 4, 1];
A [2]获得0-David。
我归还了一切,我真的无法理解。 请问,你知道如何根据arr [2]列表对第二个数组进行排序吗?
答案 0 :(得分:1)
您可以使用带索引的另一个数组,根据需要对它们进行排序,并将结果映射到给定的数组。
var array = [[1, 1, 0, 0, 0], ['Peter', 'Mary', 'David', 'John', 'Billy'], [3, 2, 5, 4, 1]],
sortBy = array[2],
indices = sortBy.map(function (_, i) { return i; });
indices.sort(function (a, b) { return sortBy[a] - sortBy[b]; });
array = array.map(function (a) {
return indices.map(function (i) { return a[i]; });
});
console.log(array);
&#13;
.as-console-wrapper { max-height: 100% !important; top: 0; }
&#13;
答案 1 :(得分:0)
对于你想要实现的目标,这是一个丑陋的实现,但是,我觉得你用这种方法过于简单化了。
我建议您移植矩阵,使用第一个实现对其进行排序,然后将其转换回原始布局。
var arr = [];
arr[0] = [1, 1, 0, 0, 0];
arr[1] = ['Peter', 'Mary', 'David', 'John', 'Billy'];
arr[2] = [3, 2, 5, 4, 1];
function transpose(array) {
return array[0].map(function(col, i) {
return array.map(function(row) {
return row[i]
})
});
}
function twistedSort(matrix, sortingRowIndex) {
var transposed = transpose(matrix);
transposed.sort(function(a, b) {
if (a[sortingRowIndex] > b[sortingRowIndex]) return 1;
if (a[sortingRowIndex] < b[sortingRowIndex]) return -1;
return 0;
});
return transpose(transposed);
}
twistedSort(arr, 2);
再一次,我建议重新考虑你的问题,但如果你确定你需要这个问题的复杂解决方案,那么你去吧:)