排序与其他相关联的多维数组中的数组

Posted

技术标签:

【中文标题】排序与其他相关联的多维数组中的数组【英文标题】:sort arrays in multidimensional array associative to the others 【发布时间】:2019-04-02 09:41:15 【问题描述】:

我有三个长度相同的关联数组。这些数组位于多维数组中。像这样的:

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];

所以如果我尝试像这样对 multi_array 进行排序:

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

它只对第一个数组进行排序。

我希望,其他数组按相同的索引排序取决于排序后的数组,如下所示:

【问题讨论】:

所以,您想对multi_array 的第一个数组进行排序,然后根据第一个数组的索引对其他数组进行排序。比如array_a[3] = 1array_b[3] = 8,排序后array_a[0]现在持有1那么array_b[0]应该持有8?对吗? 你是什么意思'得到相同的指数排序取决于排序的一个'? @CalvinNunes 是的,这正是我想要的 【参考方案1】:

不是最干净的代码,但它会打印你的答案:

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);

【讨论】:

【参考方案2】:

你需要对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);

【讨论】:

我认为您误解了问题,请重新阅读并阅读问题的 cmets。 (也检查他想要的输出),他想要对第一个数组进行排序,其他数组应该按照索引而不是排序顺序跟随第一个

以上是关于排序与其他相关联的多维数组中的数组的主要内容,如果未能解决你的问题,请参考以下文章

如何创建排序数组,其顺序与输入相关联

php多维数组自定义排序 uasort()

php多维数组自定义排序 uasort()

二维,多维数组排序array_multisort()函数的使用

多维关联数组---按其中的一对值来排序

iOS Swift:将数组排序为多维数组