1

以下は、いくつかのプロパティでオブジェクトの配列をソートする関数です。

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

番号の何が問題になっていますか?

4

2 に答える 2

0

6 行目の obj2 の代わりに obj1 を入力します。

于 2012-08-11T08:04:45.317 に答える
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 の - 演算子で文字列を比較することはできないため、プロパティの型を引数として createCompareFunc(propertyName,type) に渡し、それに基づいて並べ替えます。例えば:

createCompareFunc(propertyName,type)
{
//function
//sorting based on type of element
}
createCompareFunc('age',typeof data[0]['age']); 
于 2012-08-11T10:09:54.057 に答える