海阳网网站,wordpress管理地址在哪里,寻找东莞微信网站建设,网站诚信体制建设在javascript中#xff0c;对象和数组是两种不同的类型#xff0c;这和php中的数组概念不同。在javascript中#xff0c;也有一些精妙的算法#xff0c;用来对一些对象进行排序。我在面试迅雷的时候#xff0c;也拿到一道题#xff0c;当时做题的时候考虑到时间#xff…在javascript中对象和数组是两种不同的类型这和php中的数组概念不同。在javascript中也有一些精妙的算法用来对一些对象进行排序。我在面试迅雷的时候也拿到一道题当时做题的时候考虑到时间没有去仔细研究回来后再读了一些方法就知道真正的考点在哪里了。
我们现在有一组“学生”对象包含“名字年龄”等属性现在要求一个算法把这些对象放在一个数组里可以实现按照年龄对这些对象进行排序。
var sdts [{name:小明,age:12},{name:小红,age:13},{name:小花,age:11}
]
那么考点在哪里呢实际上在于数组对象的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; // 如果ab返回自然数不用交换位置
}
arr1.sort(sortRule);
但是如果遇到我们上面题目中一样每个元素并非是数组而是对象那应该怎么去处理呢其实道理是一样的只不过我们要在规制函数中重新编写一个适合对象的规制
functon sortRule(a,b) {return a.age - b.age;
}
当然这样写会遇到一些问题这是我们在明确知道要进行排序的对象数组的情况倘若对象数组元素不存在age属性那就会报错了因此你在撰写自己的规则时应该更加丰富它的规则判断。
加入我们现在不规定按照哪一个属性排序比如除了age属性我们还有学生的分数score属性我们偶尔需要按照年龄排序偶尔又需要按照score排序希望能重复用这个算法应该怎么办呢
function sortBy(field) {return function(a,b) {return a[field] - b[field];}
}
arr1.sort(sortBy(score));
没错核心的代码就这么简单了一些可能抛出错误的判断自己去考虑吧。在这种想法下面我们还可以做一个设想假如score相等的情况下我们是否可以按照年龄的大小排序输出
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(score,age));
没错其实也就这么简单你甚至可以使用argments来获取更多的参数用以传入更多的字段作为判断条件。 转载来自http://www.tangshuang.net/2406.html