提问人:Luis Daniel Arciniegas Barco 提问时间:9/19/2023 更新时间:9/19/2023 访问量:52
为什么过滤从 API 请求的对象数组时筛选方法不起作用 (Javascript)
Why the filter method is not working when filtering an array of objects requested from an API (Javascript)
问:
休息一段时间后,我一直在练习一些编码。我正在尝试从 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
}
但是,返回错误消息(见图)
但是当我对对象数组执行相同的操作时,过滤器运行良好。
我感谢任何帮助、反馈和代码改进。提前致谢!
答:
1赞
Yodawgz0
9/19/2023
#1
在这里,我们必须看一下您尝试提取 .通过将其转换为来添加适当的获取方式会有所帮助。使用之后你可以.符合您的代码流,现在在此之后,您可以使用该选项。data
JSON
data.json()
filter
filter
您可以在此处找到工作代码
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;
}
评论
sentence
是一个承诺,而不是一个数组。将呼叫放在呼叫中,就像您对所有 and 呼叫所做的那样filter
.then()
map
flat
let array = []; …; array = array.concat(response); Promise.all(array.flat()).then(results => results.flat())
是相当毫无意义的。您有一个包含单个 promise 的数组,以及一个包含单个结果的数组的 promise。仅使用Promise.all
response.then(result => …)