2016-11-07 5 views
1

Я столкнулся с этим странным поведением из выборки.JS Fetch Анализ JSON изменяет объект

Первый взгляд на этот скриншот длин (корректных) и реальных структур: console screenshot

Рассмотрим следующий JSON ответ от сервера, где likes массив явно содержит один объект, а comments массив содержит два :

{ 
    "status":"success", 
    "payload":{ 
     "272699880986":{ 
      "likes":[ 
       { 
        "createdTime":"2016-11-07T04:41:21.000Z", 
        "senderId":10209615042475034, 
        "senderName":"Alfredo Re", 
        "likes":1 
       } 
      ], 
      "comments":[ 
       { 
        "createdTime":"2016-11-07T04:41:54.000Z", 
        "senderId":1021426764639564, 
        "senderName":"Alfredo J. Re", 
        "comments":1 
       }, 
       { 
        "createdTime":"2016-11-07T04:41:24.000Z", 
        "senderId":10209615042475034, 
        "senderName":"Alfredo Re", 
        "comments":1 
       } 
      ] 
     } 
    } 
} 

Теперь, проходя этот ответ через весь response.json(), как это:

fetch('http://example.com/entries.json', { 
    method: 'GET', 
    headers: { 
     'Accept': 'application/json', 
     'Content-Type': 'application/json', 
     ...authKeys, 
    } 
}) 
.then(response => { 
    switch(response.status){ 
     case 200: 
      console.log('status 200', response) 
      return response.json() 
    } 
}) 
.then(json => { 
    console.log('parsed response') 
    console.log(json) 
}) 

Получает мне следующий результат:

{ 
    "status":"success", 
    "payload":{ 
     "272699880986":{ 
      "likes":[ 
       { 
        "createdTime":"2016-11-07T04:41:54.000Z", 
        "senderId":1021426764639564, 
        "senderName":"Alfredo J. Re", 
        "likes": 1, 
        "comments":1 
       }, 
       { 
        "createdTime":"2016-11-07T04:41:24.000Z", 
        "senderId":10209615042475034, 
        "senderName":"Alfredo Re", 
        "comments":1 
       } 
      ], 
      "comments":[ 
       { 
        "createdTime":"2016-11-07T04:41:54.000Z", 
        "senderId":1021426764639564, 
        "senderName":"Alfredo J. Re", 
        "comments":1 
       }, 
       { 
        "createdTime":"2016-11-07T04:41:24.000Z", 
        "senderId":10209615042475034, 
        "senderName":"Alfredo Re", 
        "comments":1 
       } 
      ] 
     } 
    } 
} 

посмотреть, как он перепутал likes и comments коллекции. Сейчас это сводит меня с ума. Я что-то упускаю?

UPDATE

Вот a gif showing chrome's console список, показывающий и массив, содержащий один объект, а другой один, содержащий два объекта. Когда я нажимаю первый, он превращается в массив с двумя объектами! Это меня озадачивает

+0

какой ответ вы видите на вкладке инструментов разработчика сети для этого 'fetch' - иными словами, фактический ответ от сервера –

+0

@ JaromandaX Фактический ответ - это первый фрагмент кода на вопрос –

+0

Вы понимаете, что GIF, скриншот, JSBin и код, который вы поставили в своем вопросе, все выглядят иначе? Трудно помочь, потому что мы не можем воспроизвести проблему, с которой вы столкнулись, и вы не можете воспроизвести проблему в общедоступной демонстрации для нас. – amdouglas

ответ

0

Хорошо, я выяснил, что это было на самом деле lodash's _.merge(), мутировав мои объекты, после их извлечения. Я использовал lodash для объединения двух коллекций (любит и комментирует) на основе ключа senderId.

Просто для записи, я в конечном итоге с помощью этого метода вместо: https://stackoverflow.com/a/35094948/1418038