JS 对数组对象进行排序
JS 给数组对象的某个字段做排序
·
对Number类型的数组排序是很简单的,对数组元素为对象的数组进行排序也很简单,可以写一个下面的公共方法
/** 两个参数: 参数1 是排序用的字段, 参数2 是:是否升序排序 true 为升序,false为降序*/
function compare (attr,rev) {
// console.log(attr, rev)
if(rev == undefined){
rev = 1;
}else{
rev = (rev) ? 1 : -1;
}
return (a,b) => {
a = a[attr];
b = b[attr];
if(a < b){
return rev * -1;
}
if(a > b){
return rev * 1;
}
return 0;
}
},
在代码中使用如下:
let list = [
{id: 1, name: '章三'},
{id: 10, name: 'wangwu'},
{id: 2, name: 'list'}
]
// 用id 字段做升序排序
let d = list.sort(compare('id', true))
console.log(d) // [{id: 1, name: '章三'}, {id: 2, name: 'list'}, {id: 10, name: 'wangwu'}]
这样就可以对任意一个数组对象的任意一个字段进行排序啦
为什么没有使用更简单的写法。
data.sort((a,b)=>{ return a.date-b.date}
因为在项目中得到了这样一组数据,按照要求应该用这个数据的date属性排序。但是简单写法中,排序后,诡异的不成立。
let data = [
{
"date":"2022-07-09",
"prob":"78.32"
},
{
"date":"2022-07-08",
"prob":"86.70",
},
{
"date":"2022-07-07",
"prob":"78.56"
},
{
"date":"2022-07-06",
"prob":"90.04"
},
{
"date":"2022-07-05",
"prob":"91.09"
},
{
"date":"2022-07-04",
"prob":"99.03"
},
{
"date":"2022-07-03",
"prob":"99.20"
},
{
"date":"2022-07-02",
"prob":"98.37"
},
{
"date":"2022-07-01",
"prob":"98.05"
},
{
"date":"2022-06-30",
"prob":"99.67"
},
{
"date":"2022-06-29",
"prob":"90.11"
},
{
"date":"2022-06-28",
"prob":"96.11"
},
{
"date":"2022-07-10",
"prob":"",
},
{
"date":"2022-07-11",
"prob":"",
},
{
"date":"2022-07-12",
"prob":"",
}]
用简单的
console.log(data.sort((a,b)=>{ return a.date-b.date})
可以看到数组并没有按照我想要的从6月28日——7月11日进行排序。
用封装的复杂一些的方法排序:
console.log(data.sort(Tools.compare('date', true)), '复杂的写法')
可以看到打印结果,按照想要的结果进行了排序。
更多推荐
已为社区贡献4条内容
所有评论(0)