为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

沧海一幻觉 2021-04-23 14:11:58
我有两个数组。一个数组是需要排序的项目数组。另一个数组是要作为排序依据的键(该对象的属性)。我想要一个功能,可以根据给定的每个键对数组进行排序。我试图遍历keys数组并从数组中弹出每个键,然后进行排序,但是将该键添加到我用来对数组进行排序的三进制中一直给我带来了问题。export function sortOrdersByKeys<T>(ordersArr: T[], sortByKeys: string[]): T[] {    if (sortByKeys.length === 0) {        return ordersArr;    } else {        const lastItem = sortByKeys.pop();        return sortWithKey(ordersArr, lastItem);    }}function sortWithKey(arr, key) {    key = key[0];    for (let i = 0; i < key.length(); i++) {    }    return arr.sort((a, b) => (a.key > b.key) ? 1 : -1);}
查看完整描述

2 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

这里有些错误:

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时,再遍历各个键,直到找到差异为止。


查看完整回答
反对 回复 2021-04-29
?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

这是一个基于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) ;

}


查看完整回答
反对 回复 2021-04-29
  • 2 回答
  • 0 关注
  • 154 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信