如何测试数组列中的单元格中的数字或字符串

How do I test cells in an array column for number or string

本文关键字:单元格 数字 字符串 数组 何测试 测试      更新时间:2023-09-26

我有一个多维数组,我想对其中一列进行排序。

我在另一个问题中发现了这种方法,只要你知道单元格值的类型(只有数字),它就可以很好地工作。

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)*排序之前,我想测试特定列的内容是数字还是字符串,因为排序方式不同-

a[0]-b[0]

a[0]lt b[0](lt=小于)

最简单的方法是说列中的所有单元格都定义为一个字符串,然后测试这些单元格是否都是数字。*

3)如果它们都是数字,我会使用a[0]-b[0]排序,而不是a[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));

您可以使用此函数检查值是否为数字

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