Сортировка массивов, создающих пары ключ-значение из нескольких источников - PullRequest
0 голосов
/ 30 октября 2019

У меня есть большой массив JSON, который я хочу использовать для создания пар ключ-значение, комбинируя 3 целых числа как один элемент пары и другое целое число для элемента второй пары.

Я начинающий в кодировании, поэтому выгляжуза хороший совет по пути. Целью этого кода является интеграция в мои настройки автоматизации.

Я пытаюсь поместить showid, сезон и эпизод в одно целое число, а также эпизод и пару значений ключа.

Так что дляПример ниже:

newarray = [{7.2.1: 272, 7.2.2: 273}]

2 объекта в массиве:

[
  {
    "episodes": [
      {
        "art": {
          "season.banner": "image://.jpg/",
          "season.poster": "image://.jpg/",
          "season.thumb": "image:.tbn/",
          "tvshow.banner": ".jpg/",
          "tvshow.fanart": "image:jpg/",
          "tvshow.poster": "image:jpg/"
        },
        "episode": 1,
        "episodeid": 272,
        "file": "test.avi",
        "label": "test1",
        "originaltitle": "",
        "playcount": 0,
        "plot": Hello World",
        "rating": 8,
        "season": 2,
        "thumbnail": "image.tbn/",
        "title": "test1",
        "tvshowid": 7
      },
      {
        "art": {
          "season.banner": "image://.jpg/",
          "season.poster": "image://.jpg/",
          "season.thumb": "image:.tbn/",
          "tvshow.banner": ".jpg/",
          "tvshow.fanart": "image:jpg/",
          "tvshow.poster": "image:jpg/"
        },
        "episode": 2,
        "episodeid": 273,
        "file": "test1.avi",
        "label": "test1",
        "originaltitle": "",
        "playcount": 0,
        "plot": Hello World",
        "rating": 8,
        "season": 2,
        "thumbnail": "image1.tbn/",
        "title": "test2",
        "tvshowid": 7
      },
]

Я пытался сортировать, используя push, но это слишком просто для моих нужд. Кто-нибудь может помочь?

Ответы [ 3 ]

0 голосов
/ 30 октября 2019

Вы можете использовать map для создания нового массива.

var newarray = oShows.episodes.map( function(o){
    return {[o.tvshowid + "." + o.season + "." + o.episode] : o.episodeid};
});

console.log(newarray);  //[{7.2.1: 272}, {7.2.2: 273}]

Я пытаюсь поместить showid, season и эпизод в одно целое число ...

Это невозможно, потому что, например, «7.2.1» не является целым числом. Ваш ключ будет строкой.

0 голосов
/ 30 октября 2019

Вы можете просто map для каждого шоу, затем map для каждого эпизода, а затем использовать строку шаблона для создания ключа каждого объекта:

shows = [{
  "episodes": [
    {"episode": 1, "episodeid": 272, "season": 2, "tvshowid": 7 },
    {"episode": 2, "episodeid": 273, "season": 2, "tvshowid": 7 }
  ]
}]

const mapped = shows.map(show => show.episodes.map(o => ({
  [`${o.tvshowid}.${o.season}.${o.episode}`]: o.episodeid
})))

console.log(mapped)
0 голосов
/ 30 октября 2019

Вы можете использовать редуктор, чтобы получить массив отношений:

const collection =
  {
    "episodes": [
      {
        "art": {
          "season.banner": "image://.jpg/",
          "season.poster": "image://.jpg/",
          "season.thumb": "image:.tbn/",
          "tvshow.banner": ".jpg/",
          "tvshow.fanart": "image:jpg/",
          "tvshow.poster": "image:jpg/"
        },
        "episode": 1,
        "episodeid": 272,
        "file": "test.avi",
        "label": "test1",
        "originaltitle": "",
        "playcount": 0,
        "plot": "Hello World",
        "rating": 8,
        "season": 2,
        "thumbnail": "image.tbn/",
        "title": "test1",
        "tvshowid": 7
      },
      {
        "art": {
          "season.banner": "image://.jpg/",
          "season.poster": "image://.jpg/",
          "season.thumb": "image:.tbn/",
          "tvshow.banner": ".jpg/",
          "tvshow.fanart": "image:jpg/",
          "tvshow.poster": "image:jpg/"
        },
        "episode": 2,
        "episodeid": 273,
        "file": "test1.avi",
        "label": "test1",
        "originaltitle": "",
        "playcount": 0,
        "plot": "Hello World",
        "rating": 8,
        "season": 2,
        "thumbnail": "image1.tbn/",
        "title": "test2",
        "tvshowid": 7
      },
]
}

relations = collection.episodes.reduce((acc, curr) => {
	const relation = {[curr.tvshowid + '.' + curr.season + '.' + curr.episode]: curr.episodeid}
	acc = [...acc,relation];
	return acc;
},[])
console.log(relations)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...