首页 > 编程语言 > 详细

编写排序函数时发现的问题

时间:2020-05-28 15:57:10      阅读:46      评论:0      收藏:0      [点我收藏+]

以下代码的目的为:编写一个根据不同属性值而定义的排序函数,该排序函数根据输入的属性值对数组中的对象进行从大到小排序

代码如下:

 1 function makeComp(para){
 2     //该函数实现将数组中的对象按para这个属性值从大到小排序
 3     return function(obj1,obj2){
 4         var x1=obj1.para;
 5         var x2=obj2.para;
 6         if(x1>x2){
 7             return -1;
 8         }else if(x1<x2){
 9             return 1;
10         }else{
11             return 0;
12         }
13     };
14 }
15 var arr=[{name:"a",age:20},{name:"b",age:25},{name:"c",age:30}];
16 var comp=makeComp("age");
17 arr.sort(comp);
18 console.log(arr);

结果为:

技术分享图片

 

发现结果并未正确进行排序,根本原因在于makeComp函数传入的参数为一个变量para,但由于访问对象中的元素存在两种方法,即.和[],其中.后面不能跟变量,所以在第4,5行var x1=obj1.para中,x1实际的值为undefined,必须改为var x1[para]才能正确取到值。

修改后的代码为:

 1 function makeComp(para){
 2     return function(obj1,obj2){
 3         var x1=obj1[para];
 4         var x2=obj2[para];//注意此处修改为中括号,才能正常取值
 5         if(x1>x2){
 6             return -1;
 7         }else if(x1<x2){
 8             return 1;
 9         }else{
10             return 0;
11         }
12     };
13 }

运行结果为:

技术分享图片

 

 

成功进行了排序。
另一个新手经常不注意的点为:代码一中第16行的传入参数不能直接写为age,因为不加引号的话会被系统识别为变量,而实际上不存在该变量。要么创建一个值为"age"的变量,要么直接用字面值"age"进行传值。

编写排序函数时发现的问题

原文:https://www.cnblogs.com/hygcoding/p/12981200.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!