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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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