按另一个(不相关)数组对数组进行排序

Sorting of array by another (not related) array

本文关键字:数组 排序 另一个 不相关      更新时间:2023-09-26

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

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

如果可以临时更改第一个数组,则可以执行以下操作:

  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;
    

您可以保留第一种返回值的数组。

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