js将数组对象中按照对象的某⼀个属性进⾏排序
1.对象数组
我们现在有⼀组对象,包含“name,value”等属性,实现按照value对这些对象进⾏排序。
series:[
{name:'西安市',value:100},
{name:'威阳市',value:120},
{name:'延安市',value:80},
{name:'南洛市',value:90},
{name:'榆林市',value:130}
]
2.排序⽅法
实际上在于数组对象的sort⽅法。
Array.sort(fun)
fun是⼀个函数,排序根据这个函数返回值来进⾏判断,如果返回值⼩于0表⽰两个元素不需要交换位置,1表⽰要⽤交互位置,0表⽰相等,实际上<=0等效。
sort⽅法有两个注意点:
会操作原始数组,经过操作后原始数组发⽣变化
默认排序按照字符编码排序,例如,我们有下⾯的⼀个例⼦:
var arr1 = [14,23,11,6,87,67];
arr1.sort();// [11,14,23,6,67,87] 按字符⽽⾮数值排序
想要完成值⽐较排序,必须传⼊sort参数(函数)进⾏规制制定:
function sortRule(a,b) {
return a-b; // 如果a>=b,返回⾃然数,不⽤交换位置
}
arr1.sort(sortRule);
但是,如果遇到每个元素并⾮是数值,⽽是对象,那应该怎么去处理呢?其实道理是⼀样的,只不过我们要在规制函数中重新编写⼀个适合对象的规制:
functon sortRule(a,b) {
return a.value- b.value;
}
当然,这样写只使⽤对象的value属性,这是我们在明确知道要进⾏排序的对象数组的情况,倘若对象数组元素不存在value属性,那就会报错了,因此,你在撰写⾃⼰的规则时,应该适⽤其他属性规则判断。
假如我们现在不规定按照哪⼀个属性排序,⽐如除了value属性,我们还有其他的属性,希望能重复⽤这个算法,应该怎么办呢?
function sortBy(props) {
sort函数 jsreturn function(a,b) {
return a[props] - b[props];
}
}
arr1.sort(sortBy("value"));
没错,核⼼的代码就这么简单了。在这种想法下⾯,我们还可以做⼀个设想:假如value相等的情况下,我们是否可以其他属性的⼤⼩排序输出?
function sortBy(field1,field2) {
return function(a,b) {
if(a.field1 == b.field1) return a.field2 - b.field2;
return a.field1 - b.field1;
}
}
arr1.sort(sortBy("value","score"));
没错,其实也就这么简单,甚⾄可以使⽤argments来获取更多的参数,⽤以传⼊更多的字段作为判断条件。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。