2013-03-25 85 views
2

我见过另一对夫妇类似的对这个问题的帖子,但没有工作,为我的方案,并在丢了怎么解决这个问题(如Sort a 2D array by the second value的Javascript二维数组排序 - 通过数值

我会解释这个问题 - 我在JavaScript中面临的问题;

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

标签[ “股票A”, “股票B”, “股票C”, “库存d”]

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

我想这在2D阵列

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

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

上周我发现了另一种真正漫长的方式,但是它将诸如100,1000这样的值彼此相邻排列 - 我认为这些值不是整数等,但没有这样的运气。周五我在愤怒中删除了代码。

我希望那里有些灵魂可以帮助一个新的编码器。 O值以字符串形式出现,因此需要将其转换为整数。

有数组中的条目无限量的,一旦我正确排序这些我需要保持前10名,然后组人成一组总 - 所以我想有11个条目。不过,我需要先排序才能解决这个问题。

在此先感谢。

回答

4

我想这在一个二维数组

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

这不是一个二维数组,这是字符串的一维数组。这将是一个二维数组:

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; 
}); 
+0

@TJ - 谢谢你,我可以问你/你为什么使用a.quantity?在我的例子中,这是值吗? – 2eus 2013-03-25 10:10:08

+0

为什么不只是'return(a - b);'?这两个“if”陈述似乎没有必要。 – ErikE 2013-03-28 17:36:45

+0

@ErikE:我只是习惯了写它的方式(例如,字符串和等)。当然你是对的,如果你在做数字,你可以做'返回数量 - 数量; – 2013-03-28 17:44:02