TypeScriptsorting数组

我一直在试图找出一个奇怪的问题,我遇到打字机。 它将内联布尔expression式视为第一个值的types,而不是完整的expression式。

所以,如果你尝试一些简单的如下所示:

var numericArray:Array<number> = [2,3,4,1,5,8,11]; var sorrtedArray:Array<number> = numericArray.sort((n1,n2)=> n1 > n2); 

尝试一下

您的sorting方法会出现错误,说明参数与调用目标的任何签名不匹配,因为您的结果是数字而不是布尔值。 我想我失去了一些东西,因为我很确定n1> n2是一个布尔语句。

错误是完全正确的。

正如它试图告诉你的, .sort()采用返回数字的函数,而不是布尔值。

如果第一项较小,则需要返回负值; 如果它更大,则为正;如果相等,则为零。

在对数字进行sorting时,可以使用紧凑比较:

 var numericArray: number[] = [2, 3, 4, 1, 5, 8, 11]; var sortedArray: number[] = numericArray.sort((n1,n2) => n1 - n2); 

-而不是<

如果您比较其他任何东西,则需要将比较转换为数字。

 var stringArray: string[] = ['AB', 'Z', 'A', 'AC']; var sortedArray: string[] = stringArray.sort((n1,n2) => { if (n1 > n2) { return 1; } if (n1 < n2) { return -1; } return 0; }); 

伟大的回答Sohnee。 想补充一点,如果你有一个对象数组,并且你想按键sorting,那么它几乎是一样的,这是一个可以按date(数字)或标题(string)sorting的例子:

  if (sortBy === 'date') { return n1.date - n2.date } else { if (n1.title > n2.title) { return 1; } if (n1.title < n2.title) { return -1; } return 0; } 

如果variablesn1 [field]比n2 [field]更具dynamic性,那么也可以把值作为variables,只是保持string和数字之间的差异。