基于键对数组进行递归排序

时间:2019-04-12 15:59:45

标签: javascript angular typescript

我有两个数组。一个数组是需要排序的项目数组。另一个数组是要作为排序依据的键(该对象的属性)。我想要一个功能,可以根据给定的每个键对数组进行排序。

我试图遍历keys数组并从数组中弹出每个键,然后进行排序,但是将该键添加到我用来对数组进行排序的三进制中一直给我带来了问题。

select department_block_number, cnt
from (select d.department_block_number, count(*) as cnt
      from department d
      group by d.department_block_number
      order by count(*) desc
     ) d
where rownum = 1;

2 个答案:

答案 0 :(得分:0)

这是一个基于keys数组进行排序的递归函数。让我知道您是否需要解释。

function sortWithKey(arr, keys) {
    const KEY = keys.pop();
    arr = arr.sort((a, b) => (a[KEY]> b[KEY]) ? 1 : -1);

    if(keys.legth <=0){
      return arr;
    } 
    return sortWithKey(arr, keys) ;
}

答案 1 :(得分:0)

这里有些错误:

1)a.key将查找该对象的"key"属性。您可能需要a[key]

2).length()可能不是函数

3)sortOrderByKeys中没有递归调用也没有循环

4)key = key[0];应该做什么?要只取键的第一个字符?

您的整体算法也将不起作用。

 array.sort(a).sort(b)

...将首先在a上对数组进行排序,然后在b上对数组进行排序。因此它实际上产生的结果与array.sort(b) ...

您宁愿排序一次,然后在比较两个数组元素a和b时,再遍历键,直到找到差异。