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

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


我试图遍历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);

}


沧海一幻觉
浏览 155回答 2
2回答

潇潇雨雨

这里有些错误:1)a.key将查找"key"该对象的属性。你可能想要a[key]2).length()可能不是功能3)您的既没有递归调用也没有循环&nbsp;sortOrderByKeys4)该怎么key = key[0];办?仅采用密钥的第一个字符?您的整体算法也将不起作用。&nbsp;array.sort(a).sort(b)...将首先对数组进行排序a,然后对进行排序b。因此,它实际上产生与array.sort(b)...相同的结果。您只需要排序一次,然后在比较两个数组元素a和b时,再遍历各个键,直到找到差异为止。

侃侃尔雅

这是一个基于keys数组进行排序的递归函数。让我知道您是否需要解释。function sortWithKey(arr, keys) {&nbsp; &nbsp; const KEY = keys.pop();&nbsp; &nbsp; arr = arr.sort((a, b) => (a[KEY]> b[KEY]) ? 1 : -1);&nbsp; &nbsp; if(keys.legth <=0){&nbsp; &nbsp; &nbsp; return arr;&nbsp; &nbsp; }&nbsp;&nbsp; &nbsp; return sortWithKey(arr, keys) ;}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript