2017-02-19 55 views
-1

目前我得到一個if語句中的映射

continue必須是一個循環

這是我作爲一個語法錯誤認識我的一部分,因爲它應該是固定的內部。

將解決這個問題將這個邏輯保留在if語句中的映射工作嗎?

sales = data.map(function(d) { 
    if (isNaN(+d.BookingID) == false && isNaN(+d["Total Paid"]) == false) { 
     return [+d.BookingID, +d["Total Paid"]]; 
    } else { 
     continue; 
    } 
}); 
+0

你不需要'continue'。 '.map()'將遍歷'data'中的* all *項。 –

+0

我想在這種情況下繼續相反的行爲。如果我映射的行在轉換爲數字後具有作爲NaN的BookingID和Total Paid,我想跳過這些。 –

+1

如果您只想返回符合條件的數據,請使用[.filter](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/filter),而不是' .map'。 – Mark

回答

2

正如其他人所說,你不能「繼續」從map回調中跳過的元素。您需要使用filter。爲了避免引用場兩次,一次是在過濾器中,並在地圖上一次,我會算賬過濾:

sales = data 
    .map(d => [+d["bookingId"], +d["Total Paid"]]) 
    .filter(([id, total]) => !isNaN(id) && !isNaN(total)); 

,或者更容易的情況下,你以後要包括在陣列中的附加價值:

sales = data 
    .map(d => [+d["bookingId"], +d["Total Paid"]]) 
    .filter(results => results.every(not(isNaN))); 

其中

function not(fn) { return x => !fn(x); } 

function allNotNaN(a) { return a.every(not(isNaN)); } 

和使用參數解構:

sales = data 
    .map(({bookingId, "Total Paid": total)) => [bookingId, total]) 
    .filter(allNotNaN); 
3

圖應該是1:1。

如果你也想過濾,您應該filter然後map

sales = (
    data 
    .filter(d => (!isNaN(+d.BookingID)&& !isNaN(+d["Total Paid"])) 
    .map(d => [+d.BookingID, +d["Total Paid"]]; 
});