【发布时间】:2020-01-20 14:28:37
【问题描述】:
我有一个这样的对象数组:
[
{key: "key1", label: "1"},
{key: "key2", label: "3"},
{key: "key3", label: "2"},
{key: "key4", label: "Second"},
{key: "key5", label: "First"}
]
我想对这个数组进行排序,这样按字母顺序排列的值首先出现:
[
{key: "key5", label: "First"},
{key: "key4", label: "Second"},
{key: "key1", label: "1"},
{key: "key3", label: "2"},
{key: "key2", label: "3"}
]
我想出了这个解决方案:
sortArray(list: any[], key: string) {
return list.sort(compare);
function compare(a, b) {
const aIsAlphabetic = isAlphabetical(a[key]);
const bIsAlphabetic = isAlphabetical(b[key]);
if (aIsAlphabetic && !bIsAlphabetic) {
return -1;
} else if (bIsAlphabetic && !aIsAlphabetic) {
return 1;
}
if (a[key] < b[key]) {
return -1;
}
if (a[key] > b[key]) {
return 1;
}
return 0;
}
function isAlphabetical(value: string) {
return value.match(/[a-zA-Z]/i);
}
}
该解决方案有效,但我不喜欢在sortArray 内声明多个函数的想法,我这样做对吗?或者有没有其他正确的提示?
【问题讨论】:
-
您是否尝试仅按标签排序,然后先按字母符号排序?你可以先用字母数字划分条目,对它们进行排序,然后将其余条目添加到结果列表中。
-
我建议防范未定义的键值。
标签: javascript arrays sorting