Javascript 映射中的if语句
现在我得到了一份工作 continue必须位于循环内 我认为这是一个语法错误,因为它应该被修复 修复此问题以在if语句中保留此逻辑是否可以与映射一起工作Javascript 映射中的if语句,javascript,arrays,Javascript,Arrays,现在我得到了一份工作 continue必须位于循环内 我认为这是一个语法错误,因为它应该被修复 修复此问题以在if语句中保留此逻辑是否可以与映射一起工作 sales = data.map(function(d) { if (isNaN(+d.BookingID) == false && isNaN(+d["Total Paid"]) == false) { return [+d.BookingID, +d["Total Paid"]]; }
sales = data.map(function(d) {
if (isNaN(+d.BookingID) == false && isNaN(+d["Total Paid"]) == false) {
return [+d.BookingID, +d["Total Paid"]];
} else {
continue;
}
});
地图应该是1:1 如果还需要筛选,则应先筛选,然后映射
正如其他人提到的,您不能从映射回调中继续跳过元素。你需要使用过滤器。为了避免两次引用字段,一次在筛选器中,一次在映射中,我会在之后进行筛选:
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)));
在哪里
或
以及,使用参数分解:
sales = data
.map(({bookingId, "Total Paid": total)) => [bookingId, total])
.filter(allNotNaN);
你不需要继续。映射将迭代数据中的所有项。在这种情况下,我希望继续的相反行为。如果我映射的行在转换为数值后BookingID和Total Paid为NaN,我想跳过它们。如果只想返回与条件匹配的数据,请使用a,而不是.map..map对数组中的每个数据点执行一个函数,并将该数据点设置为回调函数返回的任何值。您正在寻找.filter吗?.filter/*if条件*/.map/*返回表达式*/
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);