2012-08-11 64 views
1

以下是按某些属性对对象数组进行排序的函数。按属性排序对象的JavaScript数组时,数字出了什么问题

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}]' 

数字有什么问题?

+3

在比较函数中是'val2 = obj1 [propertyName]'是一个错字,还是它实际上在你的代码中? – mgibsonbr 2012-08-11 08:04:02

回答

0

错字OBJ1而不是OBJ2在第6行

0

下面是代码和它的工作为了什么,你问:

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中的 - 运算符进行比较,因此请将属性类型作为参数传递以创建CompareFunc(propertyName,type),并根据它进行排序。例如:

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

你必须选择这个:[自然排序的文本和数字,JavaScript](http://stackoverflow.com/questions/2802341/natural-sort-of-text-and-numbers-javascript?rq=1) – 2012-08-11 10:38:16

相关问题