【问题标题】:How to extract an Array from API response如何从 API 响应中提取数组
【发布时间】:2021-12-12 15:01:42
【问题描述】:

您好,我正在使用 https://www.npmjs.com/package/ytfps 包从 youtube 播放列表中获取 URL 和标题。回复ytfps(url).then(playlist =>{console.log(util.inspect(playlist))} 的格式如下:

{
   title: 'Music Playlist',
   url: 'https://www.youtube.com/playlist?list=PLoXvI0xCls_7WZpfvrqwBNqlnZTMylyTvdo6',
   id: '7WZpfvrqwBNqlnZTMylyTvdo6',
   video_count: 16,
   view_count: 16,
   description: '',
   isUnlisted: false,
   thumbnail_url: 'https://i.ytimg.com/vi/jBmkNzfqFZUSW4/hqdefault.jpg',
   author: {
     name: 'Default',
     url: 'https://www.youtube.com/user/gadfgagaq',
     avatar_url: 'https://yt3.ggpht.com/ytc/AKedOLQoEJLXJMV2t3MRgadfqNuhWk46GwnYr7r1DAgnGbsQ=s176-c-k-c0x00ffffff-no-rj'
   },
   videos: [
     {
       title: 'Barei - Say Yay! (Eurovision 2016 Spain)',
       url: 'https://www.youtube.com/watch?v=jBmkNzFZUW4',
       id: 'jBmkNzFZUW4',
       length: '3:07',
       milis_length: 187000,
       thumbnail_url: 'https://i.ytimg.com/vi/jBmkNzFZUW4/hqdefault.jpg',
       author: [Object]
     },
     {
       title: 'Sound of Silence',
       url: 'https://www.youtube.com/watch?v=4S6sT_2gM2o',
       id: '4S6sT_2gM2o',
       length: '3:16',
       milis_length: 196000,
       thumbnail_url: 'https://i.ytimg.com/vi/4S6sT_2gM2o/hqdefault.jpg',
       author: [Object]
     },

   ]
}

我想要的是获取 2 个数组,其中一个是 URL,另一个是标题,如下所示:

url= [https://www.youtube.com/watch?v=jBmkNzFZUW4', 'https://www.youtube.com/watch?v=4S6sT_2gM2o', and so on... ]
titles =['Barei - Say Yay! (Eurovision 2016 Spain)', 'Sound of Silence', and so on ]

那么提取这两个数组的最佳方法是什么?

【问题讨论】:

  • 为什么会有.getJSONArray()?尤其是当没有“JSON 数组”之类的东西时
  • @Andreas 那是什么样的对象,我该如何过滤?我也尝试过 JSONObject 但这是同样的问题
  • playlist.videos 是一个数组,所以...playlist.videos.reduce(...)。但是由于对其中一个答案的评论... -> 添加minimal reproducible example

标签: javascript node.js arrays json api


【解决方案1】:

试试这个:

let urls = [];
let titles = [];
playlist.videos.forEach(element => {
    urls.push(element.url);
    titles.push(element.title);
 });

 console.log("urls",urls);
 console.log("titles",titles);

【讨论】:

    【解决方案2】:

    您只需要迭代视频。然后,对于每个视频,您提取 url 并将结果放入 urls 数组中。标题也是一样,你提取标题并将结果放入一个标题数组中。

    类似:

    const urls = [];
    const titles = [];
    
    playlist.videos.forEach(video => {
        urls.push(video.url);
        titles.push(video.title);
    });
    
    console.log(urls);
    console.log(titles);
    

    【讨论】:

    • 我得到Cannot read property 'forEach' of undefined 这意味着playlist.videos 不起作用。如何提取该视频数组?
    • 我这边没问题。尝试执行这个完整的脚本gist.github.com/razafinarivohanania/… 通常它会工作。
    【解决方案3】:

    您可以声明两个单独的数组,将视频数组映射到您的对象上并相应地推送到这些数组,

    喜欢:

    
    const videoTitle = [];
    
    const videoUrl = [];
    
    playlist.videos.map(v => {
      
        videoTitle.push(v.title)
        videoUrl.push(v.url);
    });
      
    

    【讨论】:

    • 如何从播放列表中提取视频数组?因为如果我尝试util.inspect(playlist).videos.map 它会告诉我Cannot read property 'map' of undefined 我猜这是因为我没有正确获取该数组
    猜你喜欢
    • 2021-05-26
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多