2016-05-19 7 views
0

私は古いテーブルソートライブラリを書き直しています。ライブラリーでは、私はテーブルからいくつかの属性を取得し、このメソッドを持っている:文字列== ""なら空の配列を返します

<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機能を短くしたいです。関数は割り当てられた値を返します(「1,3,2」→「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

Til ES6では、その関数宣言はその位置では無効です。 'switch'ステートメントの外側に移動する方が良いでしょう。 – Bergi

+0

元はswitch文の外側にあり、メインオブジェクトの別のメソッドとして宣言されています。テストのatm。しかし、通知をありがとう。 – akinuri

+0

なぜ 'if'文を取り除きたいのですか?受け入れられた答えのようにフィルターを使うよりも、地図の前に一度入力を確認する方が、配列のすべての要素を不必要にチェックするので、入力を確認する方が良いでしょう。 – Barmar

答えて

0

あなたは

function getSortAttr(element, attr) { 
    return (element.getAttribute(attr) || "").split(",").filter(Boolean).map(Number); 
} 

が数字にそれらをマッピングする前に、アレイから空の文字列をフィルタリングするために使用することができます。

+0

これは仕事をするようです。私は属性が既に空文字列に設定されているので、 '||'部分を省略し、 'element.getAttribute(attr).split("、 ")。filter(Boolean).map(Number)'を使用しました。関数呼び出し。後で動的に変更されます。 – akinuri

+0

OK、属性が常に存在するかどうかはわかりませんでした。申し訳ありません:-)より安全です – Bergi

1

以下の関数はif info == ""をチェックします。info == ""なら空の配列を返し、そうでなければ情報文字列を分割してマップします。これは、shorthand ifステートメントと呼ばれます。

info = (info == "") ? [] : info.split(",").map(function(val) { return parseInt(val,10) }); 

また例えば、速記条件にさらに条件を追加することができます。

(info == "" || info != undefined || info != null) 

を上記info == ""が機能しない場合、これはinfo未定義であることを意味するかもしれません。これに対抗するために、我々は次のステートメントを使用することができます。

(typeof(info) != undefined) 
関連する問題