Javascript 2D数组排序 - 按数值计算

时间:2013-03-25 10:00:02

标签: javascript sorting multidimensional-array

我看过另外两篇类似于这个问题的帖子,但没有一个适用于我的场景,也没有找到解决方法(例如Sort a 2D array by the second value

我将解释这个问题 - 我在JavaScript中遇到的问题;

我有两个数组,我用它来创建第三方产品中的图表。我有以下变量;

标签[“股票A”,“股票B”,“股票C”,“股票D”]

值[“200”,“1000”,“900”,“800”]

我想在2D数组中使用

排序[“股票B,1000”,“股票C,900”,“股票D,800”,“股票A,200”]

如果可能,我想按数值排序。问题是,当我在上面发布的问题中使用解决方案时,它只将值与另一个值进行比较。我需要这个来遍历已经存储在数组中的每个值。

上周我在某个地方发现了另一个非常漫长的方式,但它正在排序100到1000之间的价值 - 我认为这不是整数等但没有这样的运气。我星期五在愤怒中删除了代码。

我希望那里的某种灵魂可以帮助一个新的程序员。 O值以字符串形式出现,因此需要将它们转换为整数。

阵列中有无限数量的条目,一旦我正确地对它们进行了排序,我需要保留前10名,然后将其他人分组到一个总数的组中 - 所以我将有11个条目。但是,在我解决这个问题之前,我需要排序。

提前致谢。

1 个答案:

答案 0 :(得分:4)

  

我想在2D数组中使用

     

sorted["Stock B, 1000","Stock C, 900", "Stock D, 800", "Stock A, 200"]

那不是2D数组,而是单个字符串数组。这将是一个2D数组:

sorted = [["Stock B", 1000], ["Stock C", 900], ["Stock D", 800], ["Stock A", 200]];

...你可以按照第二个值排序:

sorted.sort(function(a, b) {
    var avalue = a[1],
        bvalue = b[1];
    if (avalue < bvalue) {
        return -1;
    }
    if (avalue > bvalue) {
        return 1;
    }
    return 0;
});

但是对于一维对象数组你可能会更好:

sorted = [
    {name: "Stock B", quantity: 1000},
    {name: "Stock C", quantity: 900},
    {name: "Stock D", quantity: 800},
    {name: "Stock A", quantity: 200}
];

...你可以这样排序:

sorted.sort(function(a, b) {
    var avalue = a.quantity,
        bvalue = b.quantity;
    if (avalue < bvalue) {
        return -1;
    }
    if (avalue > bvalue) {
        return 1;
    }
    return 0;
});