由另一个(不相关的)数组排序数组

时间:2013-06-27 15:10:09

标签: javascript jquery

我有两个长度相同的数组。第一个数组是静态的,具有这种格式的数据  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]]

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

3 个答案:

答案 0 :(得分: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;
    

答案 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