1

The following is the function to sort an array of objects by some property.

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

What's wrong with number?

Peter
  • 5,138
  • 5
  • 29
  • 38
AmyXu
  • 11
  • 1

2 Answers2

0

Typo obj1 instead of obj2 in line 6.

JohnB
  • 13,315
  • 4
  • 38
  • 65
0

Here is the code and its' working for what you asked :

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')));

there is a logical error, i think you havn't noticed it. You can not compare string with - operator in javascript, so pass the type of property as arguments to createCompareFunc(propertyName,type), and based on that sort it. eg:

createCompareFunc(propertyName,type)
{
//function
//sorting based on type of element
}
createCompareFunc('age',typeof data[0]['age']); 
  • You have to check this : [natural sort of text and numbers, JavaScript](http://stackoverflow.com/questions/2802341/natural-sort-of-text-and-numbers-javascript?rq=1) –  Aug 11 '12 at 10:38