typescript sort is wrong

10 浏览
0 Comments

typescript sort is wrong

我有一个数组:

let a = [{id: "-1", name: "a"}, { id: "0", name: "b" }, { id: "1", name: "c" }]

我做了以下操作:

a = a.sort(x => x.id);

但由于某些原因,我发现具有id = "0"的项在最后一位。这是什么原因,我该如何修复它?

另外,我尝试将数组中的id = "0"改为id = "-2",但现在如果我再次排序,我会看到以下顺序:-1, -2, 1。出了什么问题?

也许是将一种类型强制转换为另一种类型时出现了错误?我指的是string转换为number

0
0 Comments

问题:typescript中的排序方法错误

原因:在typescript中,sort方法的参数应该是一个比较函数,该函数接受两个参数,并根据这两个参数的比较结果返回一个数字。如果返回值小于0,则排在前面的元素应该在排序后的数组中排在前面;如果返回值大于0,则排在前面的元素应该在排序后的数组中排在后面;如果返回值等于0,则两个元素的相对位置不变。

解决方法:在给sort方法传入的比较函数时,要确保函数的返回值符合上述规则。在给定的代码中,比较函数的返回值只有三个可能的取值:-1、0、1。这样的返回值是正确的,因为它们满足了上述的规则。

因此,上述代码中的sort方法是没有问题的。

0
0 Comments

问题出现的原因是,Typescript不是一种运行时语言,它会编译成JS。进行TS类型转换只是告诉TS编译器将x.id作为number类型处理,它不会执行运行时类型转换。

解决方法是进行JS类型转换,例如使用Number(x.id)

另外,为了正确排序,需要比较两个元素:

a.sort((x, y) => Number(x.id) - Number(y.id))

0