按另一个(不相关)数组对数组进行排序
Sorting of array by another (not related) array
我有两个相同长度的数组。第一个数组是静态的,具有这种格式的数据 a = [['q', 10], ['s', 20], ['z', 40], ['d', 15]]
和另一个数组b = [1, 0, 0, 1]
.所以心目中的['q', 10]
与1
有关,['s', 20]
与0
有关,['z', 40]
与0
有关,['d', 15]
与1
有关。然后我对第一个数组进行一些排序并接收,例如,a = [['d', 15], ['s', 20], ['q', 10], ['z', 40]]
.那么我可以通过什么方式更改第二个阵列来接收b = [1, 0, 1, 0]
呢?
重要。无法在第一个数组中添加/更改任何数据。
如果可以临时更改第一个数组,则可以执行以下操作:
-
用每个元素的索引值扩充第一个数组:
for (var i = 0; i < a.length; ++i) { a[i] = { value: a[i], index: i }; }
-
对数组进行排序。 如果你的排序函数是"比较",那么你可以这样做:
a.sort(function(e1, e2) { return compare(e1.value, e2.value); });
-
现在您可以通过根据索引排列它来创建一个新的"b":
var newB = []; for (i = 0; i < a.length; ++i) newB[i] = b[a[i].index]; b = newB;
-
现在恢复"a"的值:
for (i = 0; i < a.length; ++i) a[i] = a[i].value;
您可以保留第一种返回值的数组。
var c = [];
var newa = a.sort(function(a,b){
var ret = a[1] - b[1];// whatever you're sorting on
c.push(ret); // save return value
return ret;
});
然后对第二种排序执行相同的操作。
// go through and sort b the same way
var i=0;
var newb = b.sort(function(){
return c[i++];
});
如果你想在排序中使用一个函数,同时交换两个数组中的元素,
function swap(array1,array2,a,b) {
temp = array1[a];
array1[a] = array1[b];
array1[b] = temp;
temp = array2[a];
array2[a] = array2[b];
array2[b] = temp;
}
所以你可以做
a = [0,1,2,3];
b = [0,1,2,3];
swap(a,b,0,1);
你最终会得到
a: [1,0,2,3];
b: [1,0,2,3];
否则,如果您实际上希望按升序或降序对一个数组进行排序,并根据第一个数组的排序方式对另一个数组进行排序,请查看 php.js 的array_multisort:http://phpjs.org/functions/array_multisort/
有关array_multisort的一些额外文档,http://php.net/manual/en/function.array-multisort.php
- JavaScript数组排序(函数)用于对表行进行排序,而不是排序
- Javascript中的多维数组排序索引问题
- 如何按日期对Javascript对象数组排序
- 数组排序后显示更改
- 当许多元素相等时,Javascript数组排序无法正常工作
- Javascript数组排序速度受字符串长度的影响
- 按唯一键将对象数组排序为数组
- 以 js 为单位的数组排序
- js 数组排序无法正常工作
- 数组排序.论点从何而来
- 不需要的数组排序
- 数组排序不正确/不可预测,使用 indexOf 时
- Javascript将数组排序到树中
- 随后的多维数组排序会产生意外的结果
- 数组排序基于纯javascript搜索文本匹配
- Javascript自定义数组按数组排序
- 使用字符串按属性错误对对象进行数组排序
- 多维数组排序
- JavaScript与PHP在数组排序中的对比
- Javascript-关联数组排序