2017-02-19 6 views
-1

В настоящее время я получаюесли оператор в отображении

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'. –

+0

Я хочу, чтобы в этом случае продолжалось противоположное поведение. Если строка, которую я собираю, имеет либо «Резервирование», либо «Итоговый платеж» как «NaN» после преобразования в числовое значение, я хочу пропустить их. –

+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"]]; 
});