Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何对数字进行预排序而不破坏格式?_Javascript_Google Apps Script_Google Sheets_Google Apps - Fatal编程技术网

Javascript 如何对数字进行预排序而不破坏格式?

Javascript 如何对数字进行预排序而不破坏格式?,javascript,google-apps-script,google-sheets,google-apps,Javascript,Google Apps Script,Google Sheets,Google Apps,我正在编写一个自定义函数,该函数将返回一个数组: function tester(col){ var rows = [ // this gives me an error on sorting, so turn numbers to strings [4,2,3,"Tom"], [0,8,9,"Bill"], [5,7,1,"Bob"], [1,2,3,"Charlie"] ]; rows = [ // turning numbers to stri

我正在编写一个自定义函数,该函数将返回一个数组:

function tester(col){
  var rows = [ // this gives me an error on sorting, so turn numbers to strings
    [4,2,3,"Tom"],
    [0,8,9,"Bill"],
    [5,7,1,"Bob"],
    [1,2,3,"Charlie"]
  ];

  rows = [ // turning numbers to strings screws up formatting
    ["4","2","3","Tom"],
    ["0","8","9","Bill"],
    ["5","7","1","Bob"],
    ["1","2","3","Charlie"]
  ];
   rows.sort(function(a, b) {
   return a[col].localeCompare(b[col]); // sort by column passed by user
  });
  return rows;
}
如上所述,如果我传入数字,我会得到一个错误:

TypeError: Cannot find function localCompare in object
如果我将这些数字转换为字符串,我可以排序,但用户无法格式化这些数字…显示更多的小数、逗号、将它们转换为百分比等。我如何解决这个问题

编辑:

我试过Buzinas/Kriggs的建议,但它似乎对数字和负数进行了词汇排序,而其他的排序不正确。我现在有(注意负4和750):


更新

如果它们是数字,则要按数字排序,如果它们是字符串,则要按字符串排序,因此可以执行以下操作:

function tester(col){
  var rows = [
    [4,2,3,"Tom"],
    [0,8,9,"Bill"],
    [5,7,1,"Bob"],
    [1,2,3,"Charlie"]
  ];

  rows.sort(function(a, b) {
    if (typeof a[col] === 'number')
      return a[col] > b[col];
    return a[col].localeCompare(b[col]);
  });

  return rows;
}

排序后把它们变回数字?一些讨厌的提示:
(0+“”)==“0”//true
@Roomy我不知道follow@kristen我的意思是将一个空字符串(
'
)添加到一个
数字或
数字的实例将产生一个字符串,因此遵循这个
(a[col]+'')。localeCompare((b[col]+'')应该是您想要的。我没有测试它,这只是一个如何将任何数字转换为字符串的技巧。好吧,这真的很奇怪。现在,唯一可以正确排序的列是列0(第一列)。@kristen他将
.toString()
放错了位置,这实际上是将整行转换为字符串,然后进行比较,这就是为什么看起来只有列a在索引,它应该是:
a[col].toString().localeCompare(b[col].toString())。如果你对hack'ish没有问题,你可以用
(a[col]+'')来缩短它。localeCompare((b[col]+'')
。就是这样。非常感谢;)
function tester(col){
  var rows = [
    [4,2,3,"Tom"],
    [0,8,9,"Bill"],
    [5,7,1,"Bob"],
    [1,2,3,"Charlie"]
  ];

  rows.sort(function(a, b) {
    if (typeof a[col] === 'number')
      return a[col] > b[col];
    return a[col].localeCompare(b[col]);
  });

  return rows;
}