【发布时间】:2015-10-07 23:28:23
【问题描述】:
我正在编写一个自定义函数,它将返回一个数组数组:
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,750,1,"Bob"],
[1,2,3,"Charlie"]
];
rows.sort(function(a, b) {
return a[col].toString().localeCompare(b[col].toString());
});
return rows;
}
【问题讨论】:
-
排序后变回数字?
-
一些讨厌的提示:
(0+'') === '0' // true -
@Roomy 我不关注
-
@kristen 我的意思是向
number或Number的实例添加一个空字符串('') 将产生一个字符串,所以遵循这个(a[col]+'').localeCompare((b[col]+''))应该是你想要的。我没有测试它,这只是如何将任何数字转换为字符串的提示。
标签: javascript google-apps-script google-sheets google-apps