我有两个长度相同的数组。第一个数组是静态的,具有这种格式的数据
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}}。
然后我对第一个数组进行一些排序并接收,例如1
。那么我可以通过什么方式更改第二个数组以接收a = [['d', 15], ['s', 20], ['q', 10], ['z', 40]]
?
重要。无法在第一个数组中添加/更改任何数据。
答案 0 :(得分:2)
如果您可以暂时更改第一个阵列,则可以执行以下操作:
使用每个元素的索引值扩充第一个数组:
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;
答案 1 :(得分:1)
您可以保留第一个排序的返回值数组..
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++];
});
答案 2 :(得分:0)
如果你想在排序中使用一个函数来同时交换两个数组中的元素,
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