我如何获得json数据的下一个值


var data = [
{
"season": 1,
"episode": 1,
"name": "x series 1. season 1. episode",
},
{
"season": 1,
"episode": 2,
"name": "x series 1. season 2. episode",
},
{
"season": 1,
"episode": 3,
"name": "x series 1. season 3. episode",
},
{
"season": 2,
"episode": 1,
"name": "x series 2. season 1. episode",
},
]

例如,如果选定的第一季是第二集,我如何获得第一季第三集,然后是下一集?我怎么写一个函数呢?

var current = data[1];
console.log(current) // 1st season 2nd episode
/*
episode: 2
name: "x series 1. season 2. episode"
season: 1
*/

我想获得当前的下一个数据所以第一季第三集数据

我给你写了一个简单的函数,试图找到给定当前季和集的下一集:

const data = [
{
"season": 1,
"episode": 1,
"name": "x series 1. season 1. episode",
},
{
"season": 1,
"episode": 2,
"name": "x series 1. season 2. episode",
},
{
"season": 1,
"episode": 3,
"name": "x series 1. season 3. episode",
},
{
"season": 2,
"episode": 1,
"name": "x series 2. season 1. episode",
},
];
// Assumes data is already sorted by season/episode
function getNext(season, episode) {
for (const entry of data) {
if (entry.season < season) continue; // Previous season, ignore
if (entry.season > season) return entry; // Next season already, return!
if (entry.episode <= episode) continue; // Previous/same episode, ignore
// At this point, we're only left with episodes that:
// - Are in the current season
// - Have an episode number bigger than the given episode number
// Since the array is sorted, we should have S<season>E<episode+1>
// (unless your data is missing episodes)
return entry;
}
// Might be no more episodes left
return undefined;
}
for (const example of [
[1, 1],
[1, 2],
[1, 3],
[2, 1],
]) console.log(example, getNext(...example)?.name);

如果目标是在给定剧集名称的情况下查找下一集,您可以简单地使用array .prototype. findindex来获取(已排序!)数据数组中的位置,然后将索引加1。

我用HTML重现了你的情况。您必须跟踪当前选中的对象并执行下一个操作。试试这个,

var data = [
{"season": 1,"episode": 1,"name": "x series 1. season 1. episode",},
{"season": 1,"episode": 2,"name": "x series 1. season 2. episode",},
{"season": 1, "episode": 3, "name": "x series 1. season 3. episode",},
{"season": 2, "episode": 1, "name": "x series 2. season 1. episode"},
];
const showEl = document.getElementById('show');
const nextEl = document.getElementById('next');
// Assume the season 1 episode 1 is the initial item.
let current = {season: 1, episode: 1};
// Attach the click event listener to the next button.
nextEl.addEventListener('click', () => {
goToNext();
});
// Show the episode name to the show element.
function show(serial) {
const _show = data.find(item => item.season === serial.season && item.episode === serial.episode);
showEl.innerHTML = _show.name;
}
// Initially show the season 1 episode 1 item.
show(current);
// Go to the next episode function.
function goToNext() {
const {season, episode} = current;

// Check if the next episode of the current season exists or not.
let nextItem = data.find(item => item.season === season && item.episode === episode + 1);
// If the next episode of the current season not found then check the next season's
// episode 1
if (!nextItem) {
nextItem = data.find(item => item.season === season + 1 && item.episode === 1);
}

// If item found then update the current item to the next episode item.
// And show the current episode.
if (!!nextItem) {
current = nextItem;
show(current);
}
}
<div id="show"></div>
<button id="next">Next</button>

你可以试试这个:

var data = [
{
"season": 1,
"episode": 1,
"name": "x series 1. season 1. episode",
},
{
"season": 1,
"episode": 2,
"name": "x series 1. season 2. episode",
},
{
"season": 1,
"episode": 3,
"name": "x series 1. season 3. episode",
},
{
"season": 2,
"episode": 1,
"name": "x series 2. season 1. episode",
},
] 
current = data[1];
console.log(current);
console.log(getNext(current));

function getNext(current) {
index = data.indexOf(current); 
if(index < data.length - 1)
return data[index + 1];
return null;
}

最新更新