Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果出现多个第一个js,则对2个属性进行标记排序_Javascript_Sorting_Ecmascript 6 - Fatal编程技术网

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调用。(或者我没有得到你想要的…?)不,你提供的很好。但我只是想知道为什么当我进行两次单独排序时,它不起作用。你没有一个稳定的排序,只有一个项目需要排序。