javascript - 为什么 flatMap 不删除空数组?

标签 javascript arrays reactjs function flatmap

我有一个 flatMap 函数,可以获取并返回数组中每个项目的数据。如果项目没有某些信息,它还会返回一个空数组。由于我使用的是 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 不自己做吗?

最佳答案

这是因为你的回调在 flatMap 内是 async函数,所以无论如何它总是返回一个 Promise。比方说array有两个项目,第一个项目有 fetchedData第二个则不会,以下是将会发生的情况的示例:

array是:[item1, item2]

flatMap的 map 部分之后你得到[Promise(pending), Promise(pending)] (请注意,映射是瞬时的,它不会等待异步函数完成,它只是获取从它们返回的 promise )。

在压平部分之后,你会得到 [Promise(pending), Promise(pending)] (请注意,这与上面的行相同 - promise 无法扁平化。)。

Promise.all.then() 等待每个 Promise 解决并将结果传递为 data您记录的内容是 [someObject, emptyArray] .

关于javascript - 为什么 flatMap 不删除空数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64372746/

相关文章:

javascript - 正则表达式多引号

java - 尝试在 remove() 方法中从数组中删除字符串单词时出现 NullPointerException 错误

c - 将c字符串解析为指针数组时出现段错误

reactjs - 两个具有相同名称的模块 - 模拟问题

javascript - 为什么 `useCallback` 不能总是返回相同的 ref

javascript - Angular 错误: Uncaught Error: [$injector:modulerr] Failed to instantiate module

javascript - 无法设置/读取未定义的属性

javascript - 使用 useEffect 发出 Jest Act 警告

javascript - React 渲染错误

javascript - Canjs 不路由