首页 新闻 赞助 找找看

js数组中对象排序问题

0
[已解决问题] 解决于 2017-11-30 16:47

自定义的函数

function outFn(arg){
            return function(obj1,obj2){
                var value1 = obj1[arg];
                var value2 = obj2[arg];
                if(value1<value2){
                    return -1;
                }else if(value1>value2){
                    return 1;
                }else{
                    return 0;
                }
            }
        }

声明一个数组:

var data = [{name:"a",age:28},{name:"b",age:18}];

调用data.sort()方法后

复制代码
data.sort(outFn("age"));     //按照age排序
          console.log(data);          //=>[{name:"a",age:28},{name:"b",age:18}]
          console.log(data[0].age);   //=>18 
        
        data.sort(outFn("name"));    //按照name排序
        console.log(data);           //=>[{name:"a",age:28},{name:"b",age:18}]
        console.log(data[0].age);   //=>28
复制代码

把最后3行注释,按照age排序中是正常的

console.log(data); //=> [{name:"b",age:18},{name:"a",age:28}]

不理解红色的地方,求高手解答。

魔兽IT的主页 魔兽IT | 初学一级 | 园豆:118
提问于:2017-09-20 15:02
< >
分享
最佳答案
0

console.log打印在控制台的值,是点击控制台后计算得到的(也就是最后生成的),developer tools已经提示清楚了“Value below was evaluated just now",另外console在MDN上标明不是标准,各个浏览器实现方式不一样,你可以试一下console.table(data)就知道了,要打印及时值应该console.log(JSON.stringify(data));

奖励园豆:5
TCG2008 | 小虾三级 |园豆:1150 | 2017-09-20 16:50
其他回答(1)
0

红字输出的貌似不对,不知道你是用什么浏览器看的,但是经过排序后,实际情况是age为18的在前面的,所以你下面输出的就是18

hero小呆 | 园豆:204 (菜鸟二级) | 2017-09-22 11:23
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册