迹忆客 专注技术分享

当前位置:主页 > 学无止境 > WEB前端 > JavaScript >

JavaScript 按字母顺序排列对象数组

作者:迹忆客 最近更新:2023/03/10 浏览次数:

本教程将讨论使用 JavaScript 中的 sort() 函数按字母顺序排列对象数组。

如果我们有一个字符串或整数数组,我们可以使用 JavaScript 中的 sort() 函数轻松地对它们进行排序。例如,让我们使用 sort() 函数按字母顺序对字符串数组进行排序。请参考下面的代码。

var a = ['banana', 'apple', 'orange']
var m = a.sort();
console.log(m);

输出:

Array(3)
0: "apple"
1: "banana"
2: "orange"
length: 3

如你所见,数组按字母顺序排序,结果保存在变量 m 中。如果我们有一个对象数组,在使用 sort() 函数对数组进行排序之前,我们必须使用一些条件。例如,如果我们有一个包含某些人的名字和姓氏的对象数组,我们想根据这些人的姓氏对数组进行排序。我们必须在 sort() 函数内部传递一个函数,它将比较每个人的姓氏,如果第一人的姓氏小于第二人的姓氏,则该函数将返回一个负值,如果大于,函数将返回正值;如果两者相等,函数将返回零。请参考下面的代码。

var a = [
	{FirsName:"Ellie", LastName:"Williams"},
	{FirstName:"Lara", LastName : "Croft"}
];
function SortArray(x, y){
    if (x.LastName < y.LastName) {return -1;}
    if (x.LastName > y.LastName) {return 1;}
    return 0;
}
var s = a.sort(SortArray);
console.log(s);

输出:

(2) [{…}, {…}]
0: {FirstName: "Lara", LastName: "Croft"}
1: {FirsName: "Ellie", LastName: "Williams"}
length: 2

如你所见,数组是根据姓氏排序的。你还可以增加数组内的对象数量。你还可以根据名字对数组进行排序。

除了使用 if 条件,你还可以使用 localeCompare() 函数来比较字符串。它提供了许多其他的比较选项,你可以在函数内部设置这些选项。例如,让我们使用 localeCompare() 函数比较上述对象数组。请参考下面的代码。

var a = [
	{FirsName:"Ellie", LastName:"Williams"},
	{FirstName:"Lara", LastName : "Croft"}
];
function SortArray(x, y){
    return x.LastName.localeCompare(y.LastName);
}
var s = a.sort(SortArray);
console.log(s);

输出:

(2) [{…}, {…}]
0: {FirstName: "Lara", LastName: "Croft"}
1: {FirsName: "Ellie", LastName: "Williams"}
length: 2

输出与上述方法相同。你还可以将该功能设置为在比较期间忽略任何标点符号和特殊字符。例如,如果我们在某人的姓氏之前有标点符号,则该函数不会对数组进行排序。在这种情况下,我们可以使用 localeCompare() 函数并将其设置为在比较期间忽略标点符号。请参考下面的代码。

var a = [
	{FirsName:"Ellie", LastName:",Williams"},
	{FirstName:"Lara", LastName : "Croft"}
];
function SortArray(x, y){
    return x.LastName.localeCompare(y.LastName, 'fr', {ignorePunctuation: true});
}
var s = a.sort(SortArray);
console.log(s);

输出:

(2) [{…}, {…}]
0: {FirstName: "Lara", LastName: "Croft"}
1: {FirsName: "Ellie", LastName: ",Williams"}
length: 2

即使存在标点符号,数组也会根据姓氏排序。你还可以通过将 localeCompare() 函数的灵敏度设置为 base 来忽略字符串中存在的特殊字符,如下所示。

x.LastName.localeCompare(y.LastName, 'en', { sensitivity: 'base' });

除了使用 if 条件,你还可以使用 Collator() 函数来比较字符串。例如,让我们使用 Collator() 函数比较上述对象数组。请参考下面的代码。

const collator = new Intl.Collator('en');
var a = [
	{FirsName:"Ellie", LastName:"Williams"},
	{FirstName:"Lara", LastName : "Croft"}
];
function SortArray(x, y){
    return collator.compare(x.LastName, y.LastName);
}
var s = a.sort(SortArray);
console.log(s);

输出:

(2) [{…}, {…}]
0: {FirstName: "Lara", LastName: "Croft"}
1: {FirsName: "Ellie", LastName: "Williams"}
length: 2

输出与上述方法相同。你还可以通过更改 collator.compare() 函数中两个参数的位置,将排序顺序更改为降序。你还可以使用 Collator() 函数来比较不同语言的字符串;你只需要使用该语言初始化 collat​​or 对象。例如,在上面的代码中,我们使用 en 表示英语。查看此链接以获取有关 Collator() 函数的更多详细信息。

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便