网站 用 json 用 JavaScript 对不同的数组进行排序



我正在用我的网站在javascript中尝试一些东西,由于搜索查询和一个包含信息的json文件,可以用一个html文件流式传输多个系列。 但是现在我想制作一个家庭网站,其中包含按最新EP的播出日期排序的系列。但是我将所有内容都放在以系列命名的不同数组中,以便我可以通过搜索查询轻松访问系列的数据。但我似乎找不到任何方法来对这些不同的数组进行排序。

我的 json:

{
"arifureta": [
{
"name": "arifureta",
"trailer": "https://www.mp4upload.com/embed-9rlskzipxxaw.html",
"latest_ep": 4,
"episodes": {
"1": {
"address": "https://www.mp4upload.com/embed-rnah6dqcym96.html",
"date": "8-7-2019"
},
"2": {
"address": " https://www.mp4upload.com/embed-y93t9mysnnun.html",
"date": "15-7-2019"
}
}
}
],
"boku_no_hero_academia": [
{
"name": "Boku no hero academia",
"trailer": "trailer.mp4",
"latest_ep": 4
"episodes": {
"1": {
"address": "ep1.mp4",
"date": "3-4-2019"
},
"2": {
"address": "ep2.mp4",
"date": "10-4-2019"
}
}
}
]` 
}

除了基本的 .sort( (a, b( => {}( 之外,我真的没有可用的 javascript,而且我已经尝试了很多东西,但我似乎无法对其进行排序。
提前感谢您的帮助。

CodeSandbox DEMO

由于数据是一个对象,那么我们需要使用Object.entries,因为对象无法排序。Object.entries返回一个键值对数组,可以根据需要简单地对其进行排序/过滤。

function getEpisodes(entry) {
return Object.values(entry[1][0].episodes);
}
function getCloserEpisodeDate(episodes) {
return parseDate(
episodes.sort((a, b) => parseDate(a.date) < parseDate(b.date))[0].date
);
}
function getSortedEntries(data) {
const entries = Object.entries(data);
return entries.sort(
(a, b) =>
getCloserEpisodeDate(getEpisodes(a)) <
getCloserEpisodeDate(getEpisodes(b))
);
}

episodes中的日期对构造函数无效Date()这就是为什么我们需要解析它并从中构建一个新的 Date 对象。Date对于比较很有用。

function parseDate(date) {
var [day, month, year] = date.split("-");
return new Date(year, month - 1, day);
}

最新更新