如何循环访问Instagram API返回的postN动态属性获取对应url
问题根因
你的属性访问写法不生效,是JavaScript对象属性访问的语法规则导致的:
- 点(
.)语法仅支持访问固定静态名称的属性,你写的resultsMedia.post[i],逻辑上是先读取resultsMedia下名为post的属性,再取该属性的第i项;但API返回的对象里根本没有名为post的属性,只有post1/post2这类带序号的动态属性,自然会读取失败。
正确实现方式
访问动态拼接名称的属性,要使用方括号访问语法,把拼接完成的属性名字符串传入方括号即可,循环读取的参考代码如下:
const resultsMedia = await apis.insta_post(link) const allDownloadUrls = [] // 接口最多返回post1到post10共10项,循环范围设为1到10 for (let i = 1; i <= 10; i++) { // 拼接当前项的属性名 const currentPostKey = `post${i}` const currentPost = resultsMedia[currentPostKey] // 不存在对应post时终止循环,避免读取undefined报错 if (!currentPost) break // 提取url存入结果数组 allDownloadUrls.push(currentPost.url) }
更简便的写法
如果不需要按序号匹配,也可以直接用Object.values()遍历返回对象的所有属性,完全不用手动拼接属性名,适配任意数量的返回结果:
const resultsMedia = await apis.insta_post(link) const allDownloadUrls = Object.values(resultsMedia).map(item => item.url)
注意:这种写法默认API返回的对象里只有postN这类媒体属性,如果返回对象里还有其他杂项字段,需要先做字段过滤再提取url。
内容的提问来源于stack exchange,提问作者felipe
相关产品推荐
相关产品推荐

