为什么过滤从 API 请求的对象数组时筛选方法不起作用 (Javascript)

Why the filter method is not working when filtering an array of objects requested from an API (Javascript)

提问人:Luis Daniel Arciniegas Barco 提问时间:9/19/2023 更新时间:9/19/2023 访问量:52

问:

休息一段时间后,我一直在练习一些编码。我正在尝试从 api 中过滤一个对象数组并创建一个函数,该函数将从我发出请求的 fetch 标题中返回我的每一个单词。

但是,当我想进行过滤时,它显示无法识别过滤方法,并且我不知道如果您正在过滤从 api 调用的数组,它是否受到影响。

这是代码。

function titles(word){
    let sentence
    let array = []
    let api = 'https://jsonplaceholder.typicode.com/posts'
    let data = fetch(api)
    let response = data.then(res => res.json()).then(data => data.map((e) => { e.title}))
    array = array.concat(response)
    sentence = Promise.all(array.flat()).then(results => results.flat())
  const people = sentence.filter(e => e.title.includes(word))
    return people
}

但是,返回错误消息(见图)

但是当我对对象数组执行相同的操作时,过滤器运行良好。

我感谢任何帮助、反馈和代码改进。提前致谢!

error message

JavaScript 筛选 方法 包括 fetch-api

评论

2赞 Bergi 9/19/2023
sentence是一个承诺,而不是一个数组。将呼叫放在呼叫中,就像您对所有 and 呼叫所做的那样filter.then()mapflat
0赞 Bergi 9/19/2023
let array = []; …; array = array.concat(response); Promise.all(array.flat()).then(results => results.flat())是相当毫无意义的。您有一个包含单个 promise 的数组,以及一个包含单个结果的数组的 promise。仅使用Promise.allresponse.then(result => …)
0赞 xgqfrms 9/19/2023
请在您的问题中添加错误消息,而不是粘贴图像。

答:

1赞 Yodawgz0 9/19/2023 #1

在这里,我们必须看一下您尝试提取 .通过将其转换为来添加适当的获取方式会有所帮助。使用之后你可以.符合您的代码流,现在在此之后,您可以使用该选项。dataJSONdata.json()filterfilter

您可以在此处找到工作代码

   async function titles(word) {
      const sentence = [];
      const api = "https://jsonplaceholder.typicode.com/posts";
      const data = await fetch(api);
      const response = await data.json();
      const titles = response.map(({ title }) => title);
      sentence.push(...titles);
      const people = sentence.filter((title) => title.indexOf(word) > -1);
      return people;
    }