Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么';按属性对对象的JavaScript数组排序时,数字有误_Javascript_String_Numbers_Sorting - Fatal编程技术网

什么';按属性对对象的JavaScript数组排序时,数字有误

什么';按属性对对象的JavaScript数组排序时,数字有误,javascript,string,numbers,sorting,Javascript,String,Numbers,Sorting,下面是按某些属性对对象数组进行排序的函数 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}];

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

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

数字有什么问题吗?

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

以下是代码及其“适用于您要求的内容:

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中不能将字符串与-operator进行比较,因此将属性类型作为参数传递给createCompareFunc(propertyName,type),并基于该参数对其进行排序。例如:

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

在比较函数中,是键入错误还是代码中的错误?您必须检查: