Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.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 使用2步对数组排序_Javascript - Fatal编程技术网

Javascript 使用2步对数组排序

Javascript 使用2步对数组排序,javascript,Javascript,考虑以下对象数组: var-arr=[ {品牌:'BMW',年份:'2014'}, {品牌:“奥迪”,年份:“2018”}, {品牌:'Benz',年份:'2020'}, {品牌:'BMW',年份:'2011'}, {品牌:“奥迪”,年份:“2015”}, {品牌:'BMW',年份:'2010'}, {品牌:'BMW',年份:'2018'} ] 因此,我试图首先按品牌(不是按字母顺序而是按一定的重量)对这个数组进行排序,因此宝马的重量最高=>奥迪=>奔驰),其次是按年份……因此我得到如下结果:

考虑以下对象数组:

var-arr=[
{品牌:'BMW',年份:'2014'},
{品牌:“奥迪”,年份:“2018”},
{品牌:'Benz',年份:'2020'},
{品牌:'BMW',年份:'2011'},
{品牌:“奥迪”,年份:“2015”},
{品牌:'BMW',年份:'2010'},
{品牌:'BMW',年份:'2018'}
]
因此,我试图首先按品牌(不是按字母顺序而是按一定的重量)对这个数组进行排序,因此宝马的重量最高=>奥迪=>奔驰),其次是按年份……因此我得到如下结果:

var-arr=[
{品牌:'BMW',年份:'2014'},
{品牌:'BMW',年份:'2011'},
{品牌:'BMW',年份:'2010'},
{品牌:“奥迪”,年份:“2018”},
{品牌:“奥迪”,年份:“2018”},
{品牌:“奥迪”,年份:“2015”},
{品牌:'Benz',年份:'2020'}
]
这是我到目前为止尝试过的,但看起来我并不真正了解如何使用
sort()
函数:

函数排序组合(a,b){
如果(a.品牌=='BMW'和b.品牌!=='BMW'){
返回2
}否则,如果(a.品牌=='Audi'和b.品牌!=='Audi'){
返回1
}否则,如果(a.品牌=='Benz'和b.品牌!=='Benz'){
返回0
}
}
函数sortByYear(a,b){
返回parseInt(b.year)-parseInt(a.year)
}
arr.sort(sortByBrand)
arr.sort(sortByYear)

我知道这将改变第一个排序,但我真的不知道如何将两个排序合并在一起

您可以使用
localeCompare
检查一个字符串是在另一个字符串之前还是之后,返回1、0或-1。将每个对象的
.brand
属性与
localeCompare
进行比较,如果结果为0,则按年份差异进行比较:

var-arr=[
{品牌:'A',年份:'2014'},
{品牌:'B',年份:'2018'},
{品牌:'C',年份:'2020'},
{品牌:'A',年份:'2011'},
{品牌:'B',年份:'2015'},
{品牌:'A',年份:'2010'},
{品牌:'B',年份:'2018'}
]
arr.sort((a,b)=>(
a、 brand.localeCompare(b.brand)
||b年-a年
));

控制台日志(arr)如果(a.brand=='a'
那么我希望品牌位于我的阵列顶部创建一个对象或地图,其中包含所有映射到其各自权重的品牌,并将其索引到其中,以比较比较器中的两个。
权重={foo:2,bar:1}
(a,b)=>权重[a]-权重[b]| | b.year-a.year
@user121548789你能解释一下你想要的标准是什么吗?真的很好奇这个问题上的否决票(目前是一个向上,一个向下)。你是什么(否决票)感觉缺失?OP已经清楚地描述了问题和他们的尝试。@ggorlen我同意,这很可能是个骗局。但OP不应该因此而被否决票,因为他们的问题很清楚,也很详细(除非有人认为之前没有搜索到重复的目标是否决票的原因)例如,在这样的情况下,也许回答者应该得到否决票(特别是在副本清晰且之前已详尽回答的情况下),但并非如此。@ggorlen我同意可能存在副本,但我猜这不是一个容易搜索的术语,可能会被所有“按日期排序数组”属性所淹没噪音。仅仅因为一篇文章可能有一个副本并不意味着它应该被否决。作为副本关闭的高排名文章只会提高规范问题/答案的搜索引擎优化。你编辑了你的问题,但你仍然没有弄清楚品牌排序的标准。你的问题中指定的顺序是什么?I这只是品牌价值在数组中的顺序?如果是,请说明信息。在问题中,而不是在评论中。