Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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 获得';未定义';尝试使用TimSort对对象数组进行排序时返回_Javascript_Arrays_Node.js_Sorting_Timsort - Fatal编程技术网

Javascript 获得';未定义';尝试使用TimSort对对象数组进行排序时返回

Javascript 获得';未定义';尝试使用TimSort对对象数组进行排序时返回,javascript,arrays,node.js,sorting,timsort,Javascript,Arrays,Node.js,Sorting,Timsort,下面是一段代码片段,非常接近我在项目中尝试实现的内容: 这是我正在使用的软件包: 我试图按照每个对象的name属性对对象数组进行排序,该属性包含一个字符串,尽管我的函数也可以传递另一个要排序的项(即“age”) TimSort的文档不是很清楚,通过查看源代码,我仍然不太清楚如何配置我的代码 您会注意到,在我的代码中,我也想选择按“升序”或“降序”排序,但我不确定如何将其添加到我使用的TimSort方法中。您的字符串比较不会比较字符串。它只适用于数字或值为的日期等类型 如果你把它改成ab?1:0,

下面是一段代码片段,非常接近我在项目中尝试实现的内容:

这是我正在使用的软件包:

我试图按照每个对象的name属性对对象数组进行排序,该属性包含一个字符串,尽管我的函数也可以传递另一个要排序的项(即“age”)

TimSort的文档不是很清楚,通过查看源代码,我仍然不太清楚如何配置我的代码


您会注意到,在我的代码中,我也想选择按“升序”或“降序”排序,但我不确定如何将其添加到我使用的TimSort方法中。

您的字符串比较不会比较字符串。它只适用于数字或值为的日期等类型

如果你把它改成
ab?1:0
,它会工作得更好一些。这个怎么样

function sort(objectsArr, sortBy, sortOrder = 'ascending') {
  function stringCompare(a, b) {
    const left = a[sortBy], right = b[sortBy];
    return left < right ? -1 : left > right ? 1 : 0;
  }
  return timsort.sort(objectsArr, stringCompare);
}
函数排序(objectsArr、sortBy、sortOrder='升序'){
函数stringCompare(a,b){
常数左=a[sortBy],右=b[sortBy];
返回左<右?-1:左>右?1:0;
}
返回timsort.sort(objectsArr、stringCompare);
}

这仍然不能回答您的升序/降序问题。从这里开始应该很简单,但是如果您无法获得它,请询问另一个问题。

如果您对库有问题,那么根据示例,我假设它是就地排序,并且不返回任何内容。似乎证实了这一点。你为什么把
x-y
称为StringCompare?不能将字符串与减法进行比较!另外,
a
b
是否具有
sortBy
属性?非常确定它们不会,并且您需要使用括号表示法。Timsort.sort()不会返回数组的排序版本。相反,它会修改传递给它的数组<代码>常数arr=[5,4,1];timsort.sort(arr);console.log(arr);//1,4,5
function sort(objectsArr, sortBy, sortOrder = 'ascending') {
  function stringCompare(a, b) {
    const left = a[sortBy], right = b[sortBy];
    return left < right ? -1 : left > right ? 1 : 0;
  }
  return timsort.sort(objectsArr, stringCompare);
}