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