Как я могу разобрать json с массивами по индивидуальному заказу? - PullRequest
1 голос
/ 03 мая 2020

Я совершенно новичок ie в JavaScripts и прошу прощения за мой английский sh, если это так плохо. У меня json файл выглядит так:

{
   "posts":[
      {
         "id":2236659,
         "updated_at":"2020-05-02T19:58:43.763-04:00",
         "file":{
            "width":933,
            "height":1200,
            "ext":"png",
            "size":1325351,
            "md5":"d1f501df73f7d1daec07a86657baae01"
         }
      },
      {
         "id":2227726,
         "created_at":"2020-04-23T08:06:37.907-04:00",
         "file":{
            "width":933,
            "height":1200,
            "ext":"png",
            "size":1182791,
            "md5":"112cadaaaa89841e8bb7633ba272a409"
         }
      },
      {
         "id":2218681,
         "created_at":"2020-04-16T07:56:56.849-04:00",
         "file":{
            "width":933,
            "height":1200,
            "ext":"png",
            "size":1241188,
            "md5":"c3c13b8e5c72913fa7db03ffc8b6f3c4"
         }
      }
   ]
}

Проблема в том, что порядок сообщений неправильный. Отсортировано по возрастанию идентификатора. Реальный json файл содержит более 3 постов. У меня есть список заказов. Как я могу отсортировать его по индивидуальному заказу, который я набрал. Например: я хочу получить md5 с этим заказом: 2227726,2218681,2236659

Ответы [ 2 ]

1 голос
/ 03 мая 2020

в основном вы можете использовать функцию sort , она будет выглядеть примерно так:

// expected result 2227726,2218681,2236659
const data = {
  "posts": [{
      "id": 2236659,
      "updated_at": "2020-05-02T19:58:43.763-04:00",
      "file": {
        "width": 933,
        "height": 1200,
        "ext": "png",
        "size": 1325351,
        "md5": "d1f501df73f7d1daec07a86657baae01"
      }
    },
    {
      "id": 2227726,
      "created_at": "2020-04-23T08:06:37.907-04:00",
      "file": {
        "width": 933,
        "height": 1200,
        "ext": "png",
        "size": 1182791,
        "md5": "112cadaaaa89841e8bb7633ba272a409"
      }
    },
    {
      "id": 2218681,
      "created_at": "2020-04-16T07:56:56.849-04:00",
      "file": {
        "width": 933,
        "height": 1200,
        "ext": "png",
        "size": 1241188,
        "md5": "c3c13b8e5c72913fa7db03ffc8b6f3c4"
      }
    }
  ]
}

const customComparer = {
  2227726: 1,
  2218681: 2,
  2236659: 3
}

const sortFn = (a, b) => {
  return customComparer[a.id] - customComparer[b.id]
}
const result = data.posts.sort(sortFn)

console.log(result)

обратите внимание, что если вы хотите, чтобы это было масштабируемым, это неправильный способ сортировки массива, вы пытаетесь сортировать его не обычным способом.

1 голос
/ 03 мая 2020

Надеюсь, теперь я правильно понял:)

const md5s = listOfIds.map(id => data.posts.find(post => post.id === id))

, где listOfIds - это список идентификаторов, например [2149825,2149832,2149838 ...]

Результат - массив MD5 в порядке, указанном в массиве listOfIds

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...