1

我有两个长度相同的数组。第一个数组是静态的,带有这种格式的数据 a = [['q', 10], ['s', 20], ['z', 40], ['d', 15]]和另一个数组b = [1, 0, 0, 1]。所以['q', 10]记住与1, ['s', 20]-to 0, ['z', 40]to 0, ['d', 15]to有关1。然后我对第一个数组进行一些排序并接收,例如a = [['d', 15], ['s', 20], ['q', 10], ['z', 40]]. 那么我可以通过什么方式将第二个数组更改为接收b = [1, 0, 1, 0]

重要的。无法在第一个数组中添加/更改任何数据。

4

3 回答 3

2

如果您可以临时更改第一个数组,您可以这样做:

  1. 用每个元素的索引值扩充第一个数组:

    for (var i = 0; i < a.length; ++i) {
      a[i] = { value: a[i], index: i };
    }
    
  2. 对数组进行排序。如果您的排序功能是“比较”,那么您可以这样做:

    a.sort(function(e1, e2) {
      return compare(e1.value, e2.value);
    });
    
  3. 现在您可以通过根据索引排列来创建一个新的“b”:

    var newB = [];
    for (i = 0; i < a.length; ++i)
      newB[i] = b[a[i].index];
    b = newB;
    
  4. 现在恢复“a”的值:

    for (i = 0; i < a.length; ++i)
      a[i] = a[i].value;
    
于 2013-06-27T15:17:39.757 回答
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++];
});
于 2013-06-27T15:22:43.750 回答
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

于 2013-06-27T15:20:47.480 回答