gpt4 book ai didi

javascript - 按 2 个键对对象数组进行排序,其中一个键有权重

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:08:09 24 4
gpt4 key购买 nike

考虑以下对象数组:

var arr = [
{ brand : 'BMW' , year : '2014' },
{ brand : 'Audi' , year : '2018' },
{ brand : 'Benz' , year : '2020' },
{ brand : 'BMW' , year : '2011' },
{ brand : 'Audi' , year : '2015' },
{ brand : 'BMW' , year : '2010' },
{ brand : 'BMW' , year : '2018' }
]

所以我试图首先按品牌对这个数组进行排序(不是按字母顺序而是按一定的重量...所以宝马具有最高的重量 => 奥迪 => 奔驰)然后按年份..所以我得到了一些东西像这样:

var arr = [
{ brand : 'BMW' , year : '2014' },
{ brand : 'BMW' , year : '2011' },
{ brand : 'BMW' , year : '2010' },
{ brand : 'Audi' , year : '2018' },
{ brand : 'Audi' , year : '2018' },
{ brand : 'Audi' , year : '2015' },
{ brand : 'Benz' , year : '2020' }
]

这是我到目前为止尝试过的方法,但看起来我并不真正了解 sort() 的功能:

function sortByBrand (a,b) {
if(a.brand == 'BMW' && b.brand !=='BMW') {
return 2
}else if (a.brand == 'Audi' && b.brand !=='Audi') {
return 1
} else if (a.brand == 'Benz' && b.brand !=='Benz') {
return 0
}
}

function sortByYear (a,b) {
return parseInt(b.year) - parseInt(a.year)
}

arr.sort(sortByBrand)
arr.sort(sortByYear)

我知道这会改变第一种类型,但我真的不知道如何将两种类型合并在一起

最佳答案

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

var arr = [
{ brand : 'A' , year : '2014' },
{ brand : 'B' , year : '2018' },
{ brand : 'C' , year : '2020' },
{ brand : 'A' , year : '2011' },
{ brand : 'B' , year : '2015' },
{ brand : 'A' , year : '2010' },
{ brand : 'B' , year : '2018' }
]

arr.sort((a, b) => (
a.brand.localeCompare(b.brand)
|| b.year - a.year
));

console.log(arr);

请记住,.sort 回调只关心返回值是负数、0 还是正数。返回 2 与返回 1 相同(并且,为了排序算法保持一致,如果 ab 相比返回正值,则 ba 相比应返回负值)。

如果 localeCompare 不够复杂,请制作一个接受对象并返回品牌适当权重的函数:

var arr = [
{ brand : 'BMW' , year : '2014' },
{ brand : 'Audi' , year : '2018' },
{ brand : 'Benz' , year : '2020' },
{ brand : 'BMW' , year : '2011' },
{ brand : 'Audi' , year : '2015' },
{ brand : 'BMW' , year : '2010' },
{ brand : 'BMW' , year : '2018' }
];

const weights = {
BMW: 2,
Audi: 1,
Benz: 0
};
const getWeight = ({ brand }) => weights[brand];

arr.sort((a, b) => (
getWeight(b) - getWeight(a)
|| b.year - a.year
));

console.log(arr);

关于javascript - 按 2 个键对对象数组进行排序,其中一个键有权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57750722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com