Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何让异步函数使用Array.Filter作为参数传入元素_Javascript_Arrays - Fatal编程技术网

Javascript 如何让异步函数使用Array.Filter作为参数传入元素

Javascript 如何让异步函数使用Array.Filter作为参数传入元素,javascript,arrays,Javascript,Arrays,目标是检查MongoDB中是否存在重复记录,并返回一个新的文件对象(filteredObj),该对象不包含数据库中已经存在的记录。每个记录都有一个描述码 hasDuplicateDescription方法返回解析为true或false的承诺,如果数据库中没有现有记录,则返回true。否则返回false。但是,返回的filteredObj具有原始fileObj内容,没有进行任何过滤 const filteredObj = fileObj.filter((record) => {

目标是检查MongoDB中是否存在重复记录,并返回一个新的文件对象(filteredObj),该对象不包含数据库中已经存在的记录。每个记录都有一个描述码

hasDuplicateDescription方法返回解析为true或false的承诺,如果数据库中没有现有记录,则返回true。否则返回false。但是,返回的filteredObj具有原始fileObj内容,没有进行任何过滤

  const filteredObj = fileObj.filter((record) => {
    return this.hasDuplicateDescription(record.description).then(
      (res) => {
        return res;
      }
    );
  });
  return filteredObj;
下面的解决方案是让异步函数在其他文章中使用array.filter的推荐解决方案,但在我的案例中它不起作用,因为hasDuplicateDescription是一个异步函数,它需要array.filter方法传入的每个数组元素作为其参数

const results = await Promise.all(your_promises)
const filtered_results = results.filter(res => //do your filtering here)
感谢您对如何解决此问题的任何建议


谢谢大家!

您可以将数组中的每个元素映射到解析筛选条件的promise,并根据条件解析的结果将其与值筛选器组合,然后映射到值:

const asyncFilter =  async (arr, asyncCheck) => (await Promise.all(arr.map(async (item) => [await asyncCheck(item), item]))).filter(([b]) => b).map(([, x]) => x)

asyncFilter(fileObj, (record) => this.hasDuplicateDescription(record.description))

如果你需要收集所有的过滤结果,你必须等待所有的承诺完成。async只是将函数的返回包装在一个promise中,所以只需收集它们并将其提供给promise.all