【发布时间】: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 (即动态数据)根本不起作用。因此,我有两个问题:
- 为什么这种排序不适用于 second 数组? (我对这两个数组使用相同的 array.sort 函数)
- 为什么这两个数组的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