【问题标题】:Two different types of array of objects两种不同类型的对象数组
【发布时间】:2021-07-03 04:39:59
【问题描述】:

我正在尝试按剧集 ID 对我的《星球大战》剧集进行排序。我遇到了一个奇怪的问题。我有 first 数组(在屏幕截图上标记为“1”)和 second 数组(在屏幕截图上标记为“2”)。

第一个只是将数据粘贴到代码中:

const test = [
        { title: 'The Empire Strikes Back', episode_id: 5 },
        { title: 'A New Hope', episode_id: 4 },
        { title: 'Attack of the Clones', episode_id: 2 },
        { title: 'Return of the Jedi', episode_id: 6 },
        { title: 'The Phantom Menace', episode_id: 1 },
        { title: 'Revenge of the Sith', episode_id: 3 },
      ];

第二个是一个函数,它接受一个端点数组 (filmsArray),然后从所有端点获取特定的标题和 episode_id,然后将其作为对象推入数组并返回该数组。

const handleGetFilms = (filmsArray) => {
    const titlesArray = [];
    filmsArray.forEach(async (film) => {
      const {
        data: { title, episode_id },
      } = await axios.get(film);
      titlesArray.push({ title, episode_id });
    });
    return titlesArray;
  };

正如您在屏幕截图中看到的 - 对 first 数组(只是粘贴到代码中的数据)的排序效果很好,但对 second (即动态数据)根本不起作用。因此,我有两个问题:

  1. 为什么这种排序不适用于 second 数组? (我对这两个数组使用相同的 array.sort 函数)
  2. 为什么这两个数组的console.log 之间存在差异?它们不应该是一样的吗?(在屏幕截图上标记为绿色)

编辑: 我正在添加排序代码:

arrayName.sort((a, b) => a.episode_id - b.episode_id)

【问题讨论】:

  • 控制台在执行console.log 时打印对象的静态预览。如果您稍后单击控制台中的对象/数组,则会加载对该数组的引用并刷新数据。
  • 能贴出排序逻辑的代码sn-p吗?
  • filmsArray.forEach(async 无法按预期工作。它会触发您的承诺,然后继续前进,而无需等待它们完成。你需要一个for 循环。
  • @Ravikumar 我添加了排序逻辑。

标签: javascript arrays reactjs sorting


【解决方案1】:

您必须使用正常的 for 循环或其他选项更改 foreach。 forEach 循环不支持异步等待,因为 forEach 只需要一个同步函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2019-11-30
    • 2011-08-08
    相关资源
    最近更新 更多