如何过滤获取的 JSON 数据?

How to filter fetched JSON data?

我正在尝试制作一个简单的命令,从 imgur 中提取信息,找到图像,然后从那里随机决定要显示哪张照片。我遇到的问题是我似乎无法根据特定条件过滤响应。这是相关代码:

  async execute(interaction) {
    const data = await fetch(
      `https://imgur.com/r/${
        subreddits[Math.floor(Math.random() * subreddits.length)]
      }/hot.json`
    )
      .then((response) => response.json())
      .then((body) => body.data)

    const filtered = await data.filter(
      (element) => element.animated == "false"
    );
    console.log(filtered);
    const selected = data[Math.floor(Math.random() * data.length)];
    await interaction.reply({
      content: `https://imgur.com/${selected.hash}${selected.ext.replace(
        /\?.*/,
        ""
      )}`,
    });
  }

如您所见,我尝试根据每个 JSON 元素上存在的动画布尔值来过滤数据。 False 表示它不是动画,因此它是一个图像。但是 filtered 值只是 returns 一个空数组 []。我不确定为什么它没有将所有过滤的(图像)值作为 json 数据传递。任何帮助将不胜感激。

编辑:这是进入 data 的 JSON 信息的多个元素之一。想象一下,但是来自不同帖子的 20 倍:

{
    id: 5987473707,
    hash: 'jV66SOE',
    author: 'RushVoidStaff',
    account_id: null,
    account_url: null,
    title: 'Meet these three brothers! Wheels, Judas and Porridge',
    score: 73947,
    size: 1015100,
    views: '111639',
    is_album: false,
    album_cover: null,
    album_cover_width: 0,
    album_cover_height: 0,
    mimetype: 'image/jpeg',
    ext: '.jpg',
    width: 2048,
    height: 1536,
    animated: false,
    looping: false,
    reddit: '/r/kittens/comments/dmtfvc/meet_these_three_brothers_wheels_judas_and/',
    subreddit: 'kittens',
    description: '#kittens #aww',
    create_datetime: '2019-10-25 06:31:29',
    bandwidth: '105.54 GB',
    timestamp: '2019-10-25 06:40:10',
    section: 'kittens',
    nsfw: false,
    prefer_video: false,
    video_source: null,
    video_host: null,
    num_images: 1,
    in_gallery: false,
    favorited: false,
    adConfig: {
      safeFlags: [Array],
      highRiskFlags: [],
      unsafeFlags: [],
      wallUnsafeFlags: [],
      showsAds: true
    }
  }

JSON 中的值是 false,而不是 "false"。只需将 == "false" 替换为 === false。松散等号不适用于布尔值,因为 javascript 将“false”视为非空字符串,它会转换为 true。