undefined比较函数(compare)接受两个参数,如果第一个参数在第二个参数之前,则返回负数;如果两个参数相等,则返回0;如果第一个参数在第二个参数之后,则返回整数。函数比较(值1,值2){如果(值1<值2){返回-1;}elseif(value1>value2){返回1;}else{返回0;我们将比较函数传递给sort()方法,对arr数组进行排序后,打印结果如下:vararr=[101,1,3,5,9,4,11];console.log(arr.sort(compare));//输出:[1,3,4,5,9,11,101];可以发现从小到大排序是没有问题的。3.对对象数组进行排序sort()方法通过传入一个比较函数对数字数组进行排序,但是在开发中,我们会对一个对象数组的某个属性进行排序,比如id、age等,那么如何解决呢?解决这个问题:我们可以定义一个函数,让它接收一个属性名,然后根据属性名创建一个比较函数,作为返回值返回(JS中的函数可以作为值,不仅像传递parameters将一个函数传递给另一个函数,也可以返回一个函数作为另一个函数的结果。函数作为JS中的一等公民不无道理,它们确实非常灵活。),代码如下。函数compareFunc(prop){返回函数(obj1,obj2){varvalue1=obj1[prop];varvalue2=obj2[prop];如果(值1<值2){返回-1;}elseif(value1>value2){返回1;}else{返回0;}}}定义一个数组users,调用sort()方法传入compareFunc(prop),打印结果:varusers=[{name:'tom',age:18},{name:'lucy',age:24},{name:'jhon',age:17},];console.log(users.sort(compareFunc('age')));//输出结果[{name:"jhon",age:17},{name:"tom",age:18},{name:"lucy",age:24}]默认情况下,调用sort()方法时不传入比较函数,sort()方法将调用每个对象的toString()方法来确定它们的顺序。当我们调用compareFunc('age')方法创建比较函数时,排序是基于对象的age属性。4、XML节点的排序虽然后台返回的很多数据都是JSON格式的,但是非常轻量级,容易解析。但是之前有一个项目因为后台返回的都是XML字符串,前端拿到数据后要序列化,有的还需要排序。之前的排序是将XML转化为数组对象进行排序。这样做没有问题,但是感觉代码很冗余,很麻烦。后来突发奇想,得到的xml也是类数组对象。类数组对象直接转成数组不就可以排序了吗?undefinedundefined
