我有两个数组。一个数组是需要排序的项目数组。另一个数组是要作为排序依据的键(该对象的属性)。我想要一个功能,可以根据给定的每个键对数组进行排序。我试图遍历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时,再遍历各个键,直到找到差异为止。

侃侃尔雅
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) ;
}
添加回答
举报
0/150
提交
取消