2016-08-24 8 views
1

このマップを返さないようにするにはどうすればよいですか?Array.mapで未定義を返す

var onCompareSelectedClick = function() { 
      var talentProfileInfoForAppliedResources = appliedResourcesEntries.map(function(res) { 
       console.log(res); 
       if(res.compareSelected == true) { 
        return data.getTalentProfileInfo(res.RES.RES_ID); 
       } 
      }); 
      console.log(talentProfileInfoForAppliedResources); 
      this.openCompareTPDlg(talentProfileInfoForAppliedResources); 
     }.bind(this); 
+0

問題はMSP文の内部、条件付きであるかもしれないように見えますが、あなたは本当に問題を実証するためのフィドルを取得する必要があります。 – Sudsy

+0

res.compareSelected = false..iが必要な場合は、それはundefindに戻ります – FreakProgrammer

答えて

0

と同じように、必要な値を返すmapメソッド内elseステートメントを追加します。

if(res.compareSelected == true) { 
    return data.getTalentProfileInfo(res.RES.RES_ID); 
} else { 
    return 'default_value'; 
} 
0

TL; DR

は未定義の要素を削除するArray.map後Array.filterメソッドを使用します新しい配列に追加します。

As stated in the documentation provided here:Bloomcaの答え@上の拡大


map()メソッドは、この配列のすべての要素に提供された関数を呼び出した結果で新しい配列を作成します。

したがって、新しい配列に未定義要素が含まれているのは、指定された関数を使用して呼び出されたいくつかの要素の関数内でreturnを明示的に呼び出さないためです。 Javascriptでは、明示的にreturnを呼び出しても、undefinedが返されません。上記の答えがもはや新しいアレイ内undefined素子に生じないであろう理由である

[ undefined, 2, 3 ]

newArray = [1,2,3].map(function(elem) { if (elem > 1) return elem }) 
console.log(newArray) 

:例えば

は、以下の方法でNEWARRAYが記録結果に設定され。条件res.compareSelected == trueがelseブロック内のreturnステートメントに当てはまらない場合は解決されます(ここではtrueを単に削除して、より良い方法としてres.compareSelectedとするだけです)。

Array.filterメソッドを使用すると、未定義の値を持たないArrayを返すことができます。関数を呼び出す値はdata.getTalentProfileInfo(res.RES.RES_ID)です。あなたは次のようにこれを行うことができます

var onCompareSelectedClick = function() { 
    var arr = appliedResourcesEntries.map(function(res) { 
     if(res.compareSelected == true) { 
      return data.getTalentProfileInfo(res.RES.RES_ID); 
     } 
    }); 
    var talentProfileInfoForAppliedResources = arr.filter(function(elem) { 
     return elem; 
    }); 
console.log(talentProfileInfoForAppliedResources); 
this.openCompareTPDlg(talentProfileInfoForAppliedResources); 
}.bind(this); 

You can read about the Array.filter method here.