如果string ==""返回一个空数组;

时间:2016-05-19 23:49:48

标签: javascript arrays map-function

我正在重写旧的表格排序库。在库中,我有这个方法从表中获取一些属性:

<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;
    }
})

但没有工作。

2 个答案:

答案 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);
}

在将数组映射到数字之前从数组中过滤掉空字符串。