【发布时间】:2021-01-30 00:10:12
【问题描述】:
我有一个 flatMap 函数,可以为数组中的每个项目获取和返回数据。如果 item 没有某些信息,它也会返回一个空数组。由于我使用的是 flatMap,我希望它会删除所有空数组,但完成的数组仍然包含它们。
功能:
Promise.all(
array.flatMap(async (item) => {
const fetchedData = await fetch(`${item.url}`)
.then(response => response.json())
.then(data => data.stats.length ? data : null);
return fetchedData ? { ...fetchedData } : [];
})).then(data => console.log(data));
此外,当我使用 console.log(data.flat()) 而不是 console.log(data) 记录数据时,所有空数组都会被删除,但是它需要再遍历一次数组。任何想法为什么 flatMap 不自己做?
【问题讨论】:
-
fetchedData ? { ...fetchedData } : []这看起来有点奇怪,您返回的对象或数组取决于fetchedData,这是预期的吗? -
我想是的,这就是flatMap的语法。与返回数字或空数组并且正在删除该空数组的数字相同。
-
如果您在已经
flatMaped 的数组上调用flat(),那么您将进一步展平一个级别,这将解释删除空数组的原因 -
@pilchard 是的,但这就是
flatMap应该做的,不是吗? -
只有一级,根据docs
...and then flattening the result by one level. It is identical to a map() followed by a flat() of depth 1, but slightly more efficient than calling those two methods separately.
标签: javascript arrays reactjs function flatmap