Javascript 如果出现多个第一个js,则对2个属性进行标记排序
我有一个像这样的数组Javascript 如果出现多个第一个js,则对2个属性进行标记排序,javascript,sorting,ecmascript-6,Javascript,Sorting,Ecmascript 6,我有一个像这样的数组 var arr = [ { firstName: 'Maria', lastName: 'S.', country: 'Peru', continent: 'Americas', age: 30, language: 'C' }, { firstName: 'Agustin', lastName: 'V.',
var arr = [
{
firstName: 'Maria',
lastName: 'S.',
country: 'Peru',
continent: 'Americas',
age: 30,
language: 'C'
}, {
firstName: 'Agustin',
lastName: 'V.',
country: 'Uruguay',
continent: 'Americas',
age: 19,
language: 'JavaScript'
}, {
firstName: 'Precious',
lastName: 'G.',
country: 'South Africa',
continent: 'Africa',
age: 22,
language: 'JavaScript'
}, {
firstName: 'Nikau',
lastName: 'R.',
country: 'New Zealand',
continent: 'Oceania',
age: 39,
language: 'Ruby'
}
]
我正在按编程语言的字母顺序排列数组。但是,在某些情况下,有些开发人员使用相同的语言编写代码,我想按名字的字母顺序进行排序:
我已经编写了下面的函数,我认为应该可以工作
首先我按字母顺序对语言进行排序,然后在第二个排序函数中,如果语言相同,则应按名字的字母顺序对它们进行排序。如果a.language!=b、 语言
但我不确定
请参阅下面的代码。谁能看出我的误解在哪里
function sortByLanguage(list) {
return list.sort((a, b) => {
if(a.language < b.language) return -1;
if(a.language > b.language) return 1;
return 0;
}).sort((a, b) => {
if(a.language === b.language) {
if(a.firstName < b.firstName) return -1;
if(a.firstName > b.firstName) return 1;
return 0;
}
return 0;
});
}
函数排序语言(列表){
返回列表。排序((a,b)=>{
if(a.languageb.language)返回1;
返回0;
}).排序((a,b)=>{
如果(a.语言===b.语言){
如果(a.firstNameb.firstName)返回1;
返回0;
}
返回0;
});
}
您尝试先按语言对数组进行排序,然后再按名称进行排序。这不起作用,因为第二次排序不尊重第一次排序
您可以通过使用默认运算符()使用链式方法,这意味着如果第一部分未解析为truthy值,则将对第二部分求值
return a.language.localeCompare(b.language) || a.firstName.localeCompare(b.firstName);
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// sort first by language and if equal
// it returns zero, then the other part
// is evaluated
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
// sort by firstName
var数组=[{firstName:'Maria',lastName:'S.,国家:'秘鲁',大陆:'Americas',年龄:30岁,语言:'C'},{firstName:'Agustin',lastName:'V.,国家:'乌拉圭',大陆:'Americas',年龄:19岁,语言:'JavaScript'},{名字:“珍贵”,姓氏:“G.”,国家:“南非”,大陆:“非洲”,年龄:22岁,语言:“JavaScript”},{名字:“尼考”,姓氏:“R.”,国家:“新西兰”,大陆:“大洋洲”,年龄:39岁,语言:“Ruby”}]
array.sort(函数(a,b){
返回a.language.localeCompare(b.language)| | a.firstName.localeCompare(b.firstName);
});
console.log(数组);
.as控制台包装{最大高度:100%!重要;顶部:0;}
如果你链接排序,你不能保证第一个排序条件仍然有效。@Xufox,啊,好的。这就是它不起作用的原因吗?答案很好。但是,我试图不链接两个排序,但它仍然不起作用。即使我将它们分开,这有意义吗?首先按语言对它们进行排序。然后再对我进行另一个不受约束的排序按名字排序的方法如果语言相同?@RaulRodriguez,你只需要一次sort调用。(或者我没有得到你想要的…?)不,你提供的很好。但我只是想知道为什么当我进行两次单独排序时,它不起作用。你没有一个稳定的排序,只有一个项目需要排序。