数组:
let fruits = [`bananas`, `Apples`, `Oranges`];
您可以按字母顺序排序,如下所示:
fruits.sort();
但是请注意数组中的大小写不一致…大写字符将全部排在小写字符之前(足够奇怪),因此会稍微复杂一些:
let fruits = [`bananas`, `Apples`, `Oranges`];
fruits.sort((a, b) => {
return a.toLowerCase().localeCompare(b.toLowerCase());
})
console.log(fruits);
// ["Apples", "bananas", "Oranges"]
对象数组
如果您要排序的内容嵌套在对象中,则事情变得更加棘手。 使用JSON API可能很容易。
let fruits = [
{
fruit: `Bananas`
},
{
fruit: `apples`
},
{
fruit: `Oranges`
}
];
我们可以为此创建一个自定义的排序函数,但是,再走一小步便是创建一个更通用的函数,该函数将要作为排序依据的键作为参数。
const propComparator = (propName) =>
(a, b) => a[propName].toLowerCase() == b[propName].toLowerCase() ? 0 : a[propName].toLowerCase() < b[propName].toLowerCase() ? -1 : 1
所以现在我们可以用它来排序:
fruits.sort(propComparator(`fruit`));
console.log(fruits);
/*
[
{fruit: "apples"},
{fruit: "Bananas"},
{fruit: "Oranges"}
]
*/
只是一个对象
如果我们只有一个对象...
let fruits = {
Bananas: true,
apples: false,
Oranges: true
};
我们仍然需要对这些键进行小写处理,但是我们可以对键的数组进行排序,然后从该新排序的键数组中创建一个新对象。
let sortedFruits = {};
Object.keys(fruits).sort((a, b) => {
return a.toLowerCase().localeCompare(b.toLowerCase());
}).forEach(function(key) {
sortedFruits[key] = fruits[key];
});
console.log(sortedFruits);
/*
{
apples: false,
Bananas: true,
Oranges: true
}
*/
要按键排序的对象数组
let fruits = [
{
Bananas: true
},
{
Apples: false
},
{
oranges: true
}
];
这可能是所有方法中最棘手的,但是上面应该有足够的信息来对其进行整理。 得到它。
现场代码
见笔按字母顺序排列阵列由克里斯Coyier( @chriscoyier上) CodePen 。
翻译自: https://css-tricks.com/snippets/javascript/alphabetizing-arrays-objects-and-arrays-of-objects/