Проблема с получением результата с помощью функции карты java скрипта

hi i am getting result from the database as below format and i am using javascript map function to customise my returned json result

и проблема здесь в том, что я получаю обработанный результат дважды, если я объявляю литералы объекта мои данные вне функции карты, но если я объявляю литералы объекта мои данные внутри карты, я получаю ожидаемый результат, я не знаю, что происходит за пределами сцены, пожалуйста помогите мне решить мою проблему

what is the difference between two declaration could you  please explain me why this happening

data = [
    { "name" : "xyz", "date" : "28-09-2018"},
    { "name" : "abc","date" : "29-09-2018"}
]


let mydata = {}
let result =  data.map((item) => {
   mydata[item.date] = item
   return mydata
})
console.info(JSON.stringify(result,null,2))



declaring **mydata** outside map function i get this resutl:
[

  {
    "28-09-2018": {
      "name": "xyz",
      "date": "28-09-2018"
    },
    "29-09-2018": {
      "name": "abc",
      "date": "29-09-2018"
    }
  },
  {
    "28-09-2018": {
      "name": "xyz",
      "date": "28-09-2018"
    },
    "29-09-2018": {
      "name": "abc",
      "date": "29-09-2018"
    }
  }
]

declaring **mydata** within the map function i obtain below result
[

  {
    "28-09-2018": {
      "name": "xyz",
      "date": "28-09-2018"
    }
  },
  {
    "29-09-2018": {
      "name": "abc",
      "date": "29-09-2018"
    }
  }
]
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
0
29
1

Ответы 1

Обратный вызов Array#map возвращает элемент нового массива. Взгляните на документ здесь

Глобальная декларация:

mydata объявлен как gloabl, и в функции обратного вызова map вы добавляете значения к объекту mydata (mydata[item.date] = item), а затем возвращаете ссылку на объект. Дело в том, что вы возвращаете одну и ту же ссылку на объект для каждого элемента нового массива. Присмотритесь, каждый элемент - это идентичный в конечном массиве (вложенный объект). Итак, вы возвращаете один и тот же элемент для каждой итерации, а НЕ отдельный элемент.

Местная декларация

Когда вы объявляете объект внутри функции обратного вызова, вы создаете отдельный объект для каждой итерации, и каждый элемент нового массива будет иметь другой объект.

Надеюсь, это поможет!

Другие вопросы по теме