JQuery 按多个值对数组进行排序(权重)



我有一个像下面这样的多维数组,我想做一些花哨的排序,但我不确定如何处理它。我想首先按第 5 个元素对数组元素进行排序,然后是第 4 个元素,然后是第 3 个元素,然后是第 2 个元素,然后是第 1 个元素(不包括第 0 个元素 - 即名称(。

本质上是对排序进行加权。我以后可能需要做相反的排序(按 1st 排序,然后按 2nd、然后是 3rd、然后是 4th、然后是 5th 排序(。

arr[0]["Array Name 1", 0, 0, 0, 0, 0]
arr[1]["Array Name 2", 0, 0, 0, 5, 2]
arr[2]["Array Name 3", 97, 0, 0, 6, 50]
arr[3]["Array Name 4", 97, 0, 0, 0, 0]
arr[4]["Array Name 5", 96, 0, 0, 0, 12]
arr[5]["Array Name 6", 97, 2, 0, 0, 2]
arr[6]["Array Name 7", 97, 3, 0, 0, 0]
arr[7]["Array Name 8", 96, 0, 0, 4, 1]
arr[8]["Array Name 9", 96, 0, 1, 0, 0]
arr[9]["Array Name 10", 96, 0, 1, 1, 0]

我希望这是有道理的,我看到我可能需要进行比较,即

var arr = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});

但我找不到适合我的用例的东西。

您可以获取值的子集并反转临时数组。然后迭代短路以获得值的增量。

var array = [["Array Name 1", 0, 0, 0, 0, 0], ["Array Name 2", 0, 0, 0, 5, 2], ["Array Name 3", 97, 0, 0, 6, 50], ["Array Name 4", 97, 0, 0, 0, 0], ["Array Name 5", 96, 0, 0, 0, 12], ["Array Name 6", 97, 2, 0, 0, 2], ["Array Name 7", 97, 3, 0, 0, 0], ["Array Name 8", 96, 0, 0, 4, 1], ["Array Name 9", 96, 0, 1, 0, 0], ["Array Name 10", 96, 0, 1, 1, 0]];
array.sort((a, b) => {
   var aa = a.slice(1).reverse(),
       bb = b.slice(1).reverse(),
       delta;
       
   aa.some((v, i) => delta = v - bb[i]);
   return delta;
});
console.log(array.map(a => a.join(' ')));
.as-console-wrapper { max-height: 100% !important; top: 0; }

首先请注意,这不是权重。它只是按多个条件排序。

为了实现您的要求,我建议创建一个函数来执行将索引传递给的比较。然后,您可以递归调用此函数,当值相等时,每次调用时递减索引。该函数将向sort()处理程序返回一个值,指示如何处理当前元素的索引。像这样:

var arr = [["Array Name 1", 0, 0, 0, 0, 0], ["Array Name 2", 0, 0, 0, 5, 2], ["Array Name 3", 97, 0, 0, 6, 50], ["Array Name 4", 97, 0, 0, 0, 0], ["Array Name 5", 96, 0, 0, 0, 12], ["Array Name 6", 97, 2, 0, 0, 2], ["Array Name 7", 97, 3, 0, 0, 0], ["Array Name 8", 96, 0, 0, 4, 1], ["Array Name 9", 96, 0, 1, 0, 0], ["Array Name 10", 96, 0, 1, 1, 0]];
arr.sort(function(a, b) {
  return doSort(a, b)
});
function doSort(a, b, i) {
  i = i || a.length - 1;
  var diff = a[i] - b[i];
  if (diff == 0)
    diff = doSort(a, b, --i);        
  return diff;  
}
console.log(arr);

最新更新