2014-10-22 69 views
1

我有一个多维数组,我想对其中一列进行排序。如何在数组或字符串中测试数组列中的单元格

我发现这个方法在另一个问题,只要你知道单元格值的类型(只有数字),它工作正常。

var arr = [ 
    [12, 'AAA', '3ab'], 
    [12, 'BBB', '5ac'], 
    [12, 'CCC', '9tt'], 
    [28, 'DDD', 'cpo'], 
    [18, 'CCC', 'ert'], 
    [12, 'DDD', 'jet'], 
    [18, 'CCC', 'o55'], 
    [28, 'DDD', 'y65'], 
    [28, 'DDD', '549'], 
    [58, 'BBB', '772'], 
    [68, 'BBB', '999'], 
    [78, 'BBB', '3p5'] 
]; 

arr.sort(function(a,b) { 
    return a[0]-b[0] 
}); 

- 我想要做的是在排序之前测试数字或字符串的单元格值。 - 这是怎么做的?

我想我需要提供一些更多的信息 - 对于我笨拙的解释抱歉。

1)我想每次只排列其中一列。

2) *排序前我想测试如果特定列的内容是数字或字符串,因为排序是不同的做法 -

一个[0] -b [0]

VS

一个[0] LT b [0](LT =小于)

最简单的方法将正确地是说,在列中的所有细胞被定义为一个字符串,然后测试查看如果都用数字代替。*

3)如果他们都是数字我会使用一个[0] -b [0]分拣A [0]

希望,而不是这解释了它比以前好。

+0

'变种isString =函数(VAL){返回的typeof VAL == “串”; var isNumber = function(val){return!isNaN(val);} var isNumber = function(val) }' 你可以利用这两个函数 – benhowdle89 2014-10-22 11:07:07

+1

@ benhowdle89:'isNaN'不检查一个值是否是数字。它检查一个值是否为'NaN'。 – Cerbrus 2014-10-22 11:09:48

+0

@ benhowdle89您应该使用'typeof“数字”'代替。 – 2014-10-22 11:10:43

回答

0

,然后在这些阵列中的第二个值,你需要这样的事:

arr.sort(function(a,b) { 
    var first = a[0] - b[0]; 
    return (first === 0 ? (a[1] > b[1] ? 1 : (a[1] < b[1] ? -1 : 0)) : first); 
}); 
// Result: 
[[12,"AAA"],[12,"BBB"],[12,"CCC"],[12,"DDD"],[18,"CCC"],[18,"CCC"],[28,"DDD"],[28,"DDD"],[28,"DDD"],[58,"BBB"],[68,"BBB"],[78,"BBB"]] 

或者,而不三元速记:

arr.sort(function(a,b) { 
    var first = a[0] - b[0]; // Difference between the 2 numeric values (a[0], b[0]) 
    if (first === 0) {  // If the numeric values are equal 
     if (a[1] > b[1]) { // Return a order depending on the string values (a[1], b[1]) 
      return 1; 
     } 
     if (a[1] < b[1]) { 
      return -1; 
     } 
     return 0; // The string values are the same, so return `0` 
    } 
    return first; // The numeric values are not the same, so return the difference as sort result. 
}); 
// Result: 
[[12,"AAA"],[12,"BBB"],[12,"CCC"],[12,"DDD"],[18,"CCC"],[18,"CCC"],[28,"DDD"],[28,"DDD"],[28,"DDD"],[58,"BBB"],[68,"BBB"],[78,"BBB"]] 

可运行样品:

var arr = [[12,'AAA'],[12,'BBB'],[12,'CCC'],[28,'DDD'],[18,'CCC'],[12,'DDD'],[18,'CCC'],[28,'DDD'],[28,'DDD'],[58,'BBB'],[68,'BBB'],[78,'BBB']]; 
 
var sorted = arr.sort(function(a,b){ 
 
    var first=a[0]-b[0]; 
 
    return(first===0?(a[1]>b[1]?1:(a[1]<b[1]?-1:0)):first); 
 
}) 
 
alert(JSON.stringify(sorted));

-1

您可以检查一个值是数字如果要通过的第一个值排序使用此功能

function isNumeric(n) { 
    return !isNaN(parseFloat(n)) && isFinite(n); 
} 
+0

'parseFloat(“123abc”)'返回'123',它不是'NaN'。 – Cerbrus 2014-10-22 11:25:27

+0

@Cerbrus无关紧要,功能必须检查 如果输入值是一个数字,并且它总是返回正确的值 – 2014-10-22 11:35:39