按字母顺序排列数组,对象和对象数组

数组:

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/

你可能感兴趣的:(按字母顺序排列数组,对象和对象数组)