我正在重写旧的表格排序库。在库中,我有这个方法从表中获取一些属性:
<table data-sort-cols="" data-sort-orders="">
getSortInfo : function(element) {
switch (element.tagName) {
case "TABLE":
function getSortAttr(element, attr) {
var info = element.getAttribute(attr);
if (info != "") {
info = info.split(",").map(function(val) { return parseInt(val,10) });
} else {
info = [];
}
return info;
};
return {
columns : getSortAttr(element, "data-sort-cols"),
orders : getSortAttr(element, "data-sort-orders"),
}
我想缩短getSortAttr
功能。函数返回指定的值(例如&#34; 1,3,2&#34; - &gt; [1,3,2])。如果属性没有赋值,则返回空数组。我想摆脱if语句。
有没有办法修改这一行,如果字符串为空""
则返回一个空数组?
info = info.split(",").map(function(val) { return parseInt(val,10) });
我已经尝试了
// returns [NaN]
"".split(",").map(function(val) {
return parseInt(val, 10);
})
// returns [undefined]
"".split(",").map(function(val) {
var num = parseInt(val, 10);
if (!isNaN(num) && isFinite(num)) {
return num;
}
})
但没有工作。
答案 0 :(得分:1)
以下函数将检查if info == ""
,如果info ==&#34;&#34;,它将返回一个空数组,如果没有,它将拆分信息字符串并映射它。这称为shorthand
if语句。
info = (info == "") ? [] : info.split(",").map(function(val) { return parseInt(val,10) });
您还可以为速记条件添加更多条件,例如:
(info == "" || info != undefined || info != null)
如果上述info == ""
不起作用,则可能意味着info
未定义。为了解决这个问题,我们可以使用以下声明:
(typeof(info) != undefined)
答案 1 :(得分:0)
您可以使用
function getSortAttr(element, attr) {
return (element.getAttribute(attr) || "").split(",").filter(Boolean).map(Number);
}
在将数组映射到数字之前从数组中过滤掉空字符串。