【问题标题】:what's wrong with number while sort JavaScript array of Objects by properties按属性对对象的JavaScript数组进行排序时数字有什么问题
【发布时间】:2012-08-11 07:59:15
【问题描述】:

以下是按某些属性对对象数组进行排序的函数。

function createCompareFunc(propertyName){ 
  return function(obj1, obj2){    
    var val1=obj1[propertyName];   
    var val2=obj1[propertyName];
    return val1-val2;    
  }
}

var data=[{name:'a', age:12},{name:'b',age:5}];    
console.log(typeof data[0]['age']); //number    
console.log(data.sort(createCompareFunc('name')));    
//[Object{name="a", age=12},Object{name="b",age=5}]   
console.log(data.sort(createCompareFunc('age')));     
//[Object{name="a", age=12},Object{name="b",age=5}], but I want to get '[Object{name="b",age=5},Object{name="a", age=12}]'

数字有什么问题?

【问题讨论】:

  • 在比较函数中,val2=obj1[propertyName] 是拼写错误,还是实际上在您的代码中?

标签: javascript string numbers sorting


【解决方案1】:

在第 6 行中输入 obj1 而不是 obj2。

【讨论】:

    【解决方案2】:

    这是代码,它可以满足您的要求:

    function createCompareFunc(propertyName){
      return function(obj1, obj2){ 
         val1=obj1[propertyName];   
         val2=obj2[propertyName];    
        return val1-val2;    
      }
    }
    
    var data=[{name:'a', age:12},{name:'b',age:5}];    
    console.log(typeof data[0]['age']); 
    console.log(data.sort(createCompareFunc('age'))); 
    console.log(typeof data[0]['name']);
    console.log(data.sort(createCompareFunc('name')));
    

    有一个逻辑错误,我想你没有注意到它。您不能在 javascript 中将字符串与 - 运算符进行比较,因此将属性类型作为参数传递给 createCompareFunc(propertyName,type),并基于该类型对其进行排序。例如:

    createCompareFunc(propertyName,type)
    {
    //function
    //sorting based on type of element
    }
    createCompareFunc('age',typeof data[0]['age']); 
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-03
    相关资源
    最近更新 更多