使用此数组:
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]列表对第二个数组进行排序?
您可以在索引上使用另一个数组,根据需要对它们进行排序,然后将结果映射到给定的数组。
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);
.as-console-wrapper { max-height: 100% !important; top: 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);
再次,我建议重新思考您的问题,但是如果您确定需要解决此问题的解决方案,那么您就可以:(