сортировать массивы в многомерном массиве ассоциативно с другими - PullRequest
0 голосов
/ 29 октября 2018

У меня есть три ассоциативных массива одинаковой длины. Эти массивы находятся в многомерном массиве. Примерно так:

var multi_array = [];
var array_a     = [2,3,4,1,5];
var array_b     = [0,7,9,8,6];
var array_c     = ['A','D','B','A','E'];

multi_array     = [array_a, array_b, array_c];

enter image description here

Итак, если я попытаюсь отсортировать multi_array следующим образом:

multi_array[0].sort(function(a,b){
                        if(isNaN(a) || isNaN(b)){
                            return a > b ? 1 : -1;
                        }
                        return a - b;
                    });

Сортирует только первый массив.

enter image description here

Я хочу, чтобы другие массивы сортировались по тем же показателям, зависит от отсортированного, как это:

enter image description here

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Не самый чистый код, но он печатает ваш ответ:

var array_a = [2, 3, 4, 1, 5];
var array_b = [0, 7, 9, 8, 6];
var array_c = ['A', 'D', 'B', 'A', 'E'];

// get indices from array_a sorted
var len = array_a.length;
var indices = new Array(len);
for (var i = 0; i < array_a.length; ++i) indices[i] = i;
indices.sort(function(a, b) {
  return array_a[a] < array_a[b] ? -1 : array_a[a] > array_a[b] ? 1 : 0;
});

// sorted array_b and sorted_array_c
var sorted_array_a = [];
var sorted_array_b = [];
var sorted_array_c = [];
for (var i = 0; i < indices.length; ++i) {
  sorted_array_a.push(array_a[indices[i]]);
  sorted_array_b.push(array_b[indices[i]]);
  sorted_array_c.push(array_c[indices[i]])
}

var multi_array = [sorted_array_a, sorted_array_b, sorted_array_c]


console.log(multi_array);
0 голосов
/ 29 октября 2018

Вам нужно отсортировать каждый массив в multi_array

var multi_array = [];
var array_a     = [2,3,4,1,5]; //1,2,3,4,5 0:1,1:2,2:3,3:0,4:4 
var array_b     = [0,7,9,8,6]; //8,0,7,9,6
var array_c     = ['A','D','B','A','E'];

multi_array     = [array_a, array_b, array_c];

// clone the first array_a
var multi_temp = multi_array[0].slice(0);

// sort the clone
multi_temp.sort(function(a,b){
                    	if(isNaN(a) || isNaN(b)){
                        		return a > b ? 1 : -1;
                    	}
                    	return a - b;
                    });

// get the algorithm of key for sorting
var id = [];
multi_array[0].forEach((val, i) => {
	id[i] = multi_temp.indexOf(val);
} );

// and apply the algorithm in the multi_array
multi_array = multi_array.map(item => {
	var temp = [];
	id.forEach((val, i) => {
		temp[val] = item[i];
	});
	return temp;
});

console.log(multi_array);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...