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.
問題はMSP文の内部、条件付きであるかもしれないように見えますが、あなたは本当に問題を実証するためのフィドルを取得する必要があります。 – Sudsy
res.compareSelected = false..iが必要な場合は、それはundefindに戻ります – FreakProgrammer