我正在映射一个从API返回的值,并在不存在值的情况下添加一个虚拟值作为防御代码。为此,我使用JS来获得结果。但是不幸的是,我得到了Arrow function should not return assignment
错误。在这里,我分享我所实现的代码。请检查并建议我最好的解决方案。我不想禁用eslint错误。提前谢谢。
代码:
const chartData = res.data.map(
(data) => data.latestMetric = data.latestMetric === null ? dummyLatestMetric : data.latestMetric
);
错误:
Arrow function should not return assignment. eslint (no-return-assign)
发布于 2020-04-17 00:58:27
箭头函数表达式是正则函数表达式的语法紧凑替代,尽管它没有自己的绑定到这个、参数、超级或new.target关键字。箭头函数表达式不适合作为方法,它们不能用作构造函数。
map()方法创建一个新数组,该数组中填充了对调用数组中的每个元素调用提供的函数的结果。
.map()
函数将要求您为每次迭代返回一个值。如果只想通过数组循环来产生副作用,则可以考虑使用forEach
或其他循环函数。
在您的例子中,我看到您希望有条件地修改latestMetric
中的res.data
,您可以这样做:
const chartData = res.data.map(data => ({
...data,
latestMetric: data.latestMetric === null ? dummyLatestMetric : data.latestMetric,
});
扩展语法将把data
属性扩展到一个新的对象中,然后根据条件有条件地设置latestMetric
的值。
如果不想使用spread语法,也可以使用传统的Object.assign方法:
const chartData = res.data.map(data => Object.assign({}, data, {
latestMetric: data.latestMetric === null ? dummyLatestMetric : data.latestMetric,
});
关于您的防御策略,您可能对使用||
语法感兴趣,但是在验证的所有错误值(包括:false
、0
、null
、undefined
等)时要小心。
const chartData = res.data.map(data => ({
...data,
latestMetric: data.latestMetric || dummyLatestMetric,
});
最后但并非最不重要的一点是,您最好先了解ESLint规则,然后阅读编码实践背后的原因,看看您是否想要使用该规则,或者修改它,甚至在您的项目中禁用它。
发布于 2020-04-17 00:58:52
由于您没有显式地从箭头函数返回一个值,eslint希望您在一个主体中使用一个函数。
这应能解决以下问题:
const chartData = res.data.map(
(data) => {
data.latestMetric = data.latestMetric === null ? dummyLatestMetric : data.latestMetric;
});
发布于 2020-04-17 01:01:01
您需要返回值:
const chartData = res.data.map((data) => {
data.latestMetric = data.latestMetric === null ? dummyLatestMetric : data.latestMetric;
return data;
});
https://stackoverflow.com/questions/61262422
复制相似问题