我怎样才能获得 json 数据的下一个值

时间:2021-07-28 17:10:51

标签: javascript

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",
   },
]

例如,如果选择的第 1 季是第 2 集,我如何才能获得第 1 季第 3 集,然后是下一个?我该如何为此编写函数?

var current = data[1];

console.log(current) // 1st season 2nd episode

/*
episode: 2
name: "x series 1. season 2. episode"
season: 1
*/

我想获取当前第一季第三集数据的下一个数据

3 个答案:

答案 0 :(得分:0)

我已经用 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>

答案 1 :(得分:0)

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

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 索引。

答案 2 :(得分:0)

你可以试试这个:

    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;
    }
相关问题