我想创建一个通用函数,它可以使用键列表对对象数组进行排序,从而保留前一个键的顺序。下面是一个例子:
const input = [
{ a: 'aardvark', b: 'bear', c: 'camel', d: 1 },
{ a: 'anemone', b: 'bat', c: 'cobra', d: 6 },
{ a: 'aardvark', b: 'badger', c: 'camel', d: 2 },
{ a: 'alligator', b: 'bat', c: 'chicken', d: 2 },
{ a: 'alligator', b: 'beetle', c: 'cow', d: 1 },
{ a: 'alligator', b: 'bat', c: 'crab', d: 3 },
]
sortFunction(['a', 'b', 'd'], input)
// output
[
{ a: 'aardvark', b: 'badger', c: 'camel', d: 2 },
{ a: 'aardvark', b: 'bear', c: 'camel', d: 1 },
{ a: 'alligator', b: 'bat', c: 'chicken', d: 2 },
{ a: 'alligator', b: 'bat', c: 'crab', d: 3 },
{ a: 'alligator', b: 'beetle', c: 'cow', d: 1 },
{ a: 'anemone', b: 'bat', c: 'cobra', d: 6 },
]
要排序的第一个键是a
,因此输出首先按a
以降序正确地对数据排序。列表中的下一个键是b
,因此对于a
的值相同的任何项,b
键仅用于重新排序a
相同的项。最后,d
仅用于重新排序a
和b
值相同的物料。在此特定示例中,有两个物料的值分别为a: alligator
和b: bat
,因此包含d: 2
的物料将放置在包含d: 3
的物料之前。
我正在努力解决的问题是,如何将它变成一个泛型函数,它可以接受任何对象数组,并按照键列表对它们进行排序,其中键的值可以是字符串或数字,正如我在本例中所展示的。
1条答案
按热度按时间afdcj2ne1#
一种方法是使用比较器回调函数对输入调用the
sort()
method,该函数按顺序比较每个键,直到找到一个确定排序顺序的键:这是一个generic函数,它约束
objs
输入,以便已知对象数组在keys
数组的键处具有string
或number
值。您可以验证这是否能在您的示例输入上正常工作:
Playground代码链接