0

想从最大的正面到最大的负面排序。

期望输出:(3,2,1,0,-1,-2,-3),当前输出:(3,2,1,0,-3,-2,-1)

初始数组:

["-0.87", "0.51", "3.34", "1.58", "2.67", "0.51", "-1.58", "1.91", "-0.86", "-0.42", "0.23", "1.5", "-1.67", "1.9", "-2.88", "-0.63", "1.13", "-1.37", "-0.42", "-0.35", "-0.38", "0.65", "-0.41", "0.49", "1", "-0.14", "-0.07", "2.41", "3.09", "0.85", "0.51", "-0.67", "0.53", "0.98", "-0.88", "0.18", "-0.75", "-0.22", "-0.27", "-2.09", "0.01", "1.14", "-0.64", "-0.53", "3.01", "1.49", "1.56", "0", "0.67", "0.28", "-0.21", "-0.49", "-0.66", "-1.29", "0.67", "-0.76", "0.23"]

排序代码:

dataPct.sort(d3.descending);

安排如下:

["3.34", "3.09", "3.01", "2.67", "2.41", "1.91", "1.9", "1.58", "1.56", "1.5", "1.49", "1.14", "1.13", "1", "0.98", "0.85", "0.67", "0.67", "0.65", "0.53", "0.51", "0.51", "0.51", "0.49", "0.28", "0.23", "0.23", "0.18", "0.01", "0", "-2.88", "-2.09", "-1.67", "-1.58", "-1.37", "-1.29", "-0.88", "-0.87", "-0.86", "-0.76", "-0.75", "-0.67", "-0.66", "-0.64", "-0.63", "-0.53", "-0.49", "-0.42", "-0.42", "-0.41", "-0.38", "-0.35", "-0.27", "-0.22", "-0.21", "-0.14", "-0.07"]

图片: 在此处输入图像描述

4

1 回答 1

3

您正在尝试对字符串进行排序,这就是您得到意外结果的原因。你可以看到你有一个字符串数组,因为它们在引号中。

要解决此问题,您只需将字符串转换为可以使用此代码段执行的数字:

dataPct.forEach(function (d,i) {
  dataPct[i] = +d;
});

api文档中有一些关于将字符串转换为数字的讨论,例如here

于 2013-09-24T21:19:20.210 回答