Неизвестное поведение Javascript JSON

Я пытаюсь установить значение свойства объекта JSON, однако, когда я запускаю Object.property = value, весь объект JSON заменяется строкой 229,.

В следующем блоке кода:

for(var i=0; i<config["profiles"].length; i++){
    profile = config["profiles"][i];
    out = {
      "name":profile["name"],
      "version":profile["version"].replace(/_/g, "."),
      "mods":null,
      "saves":null
    }
    console.info(out)
    out.mods = getMods(profile);
    console.info(out)
    console.info(getSaves(profile))
    out.saves = getSaves(profile);
    console.info(out)
    profiles.push(out);
}
return profiles;

Первые 2 вызова console.info(out), как и ожидалось, возвращают правильный объект JSON.

console.info(getSaves(profile)) печатает следующее:

[ { name: 'Hard Career ',
    mode: 'CAREER',
    funds: '275,520',
    science: '229',
    reputation: '721',
    flights: '20' },
  { name: 'Sandbox ',
    mode: 'SANDBOX',
    funds: 0,
    science: 0,
    reputation: 0,
    flights: '12' } ]

Однако печать сразу после out.saves = getSaves(profile) печатает следующее: 229,.

Чтобы еще больше усложнить ситуацию, это происходит только с одним элементом в массиве config["profiles"].

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

Заранее спасибо!

console.info - это просмотр объектов в реальном времени. Попробуйте использовать console.info(JSON.stringify(out)), чтобы увидеть реальные снимки
Phil 15.09.2018 04:30

Также вы всегда должны объявлять такие переменные, как let out = .

Mark 15.09.2018 04:30

@MarkMeyer это наверное проблема

Phil 15.09.2018 04:32

Вы даете ссылку на обработанный profile на функции getMods и getSaves, но не предоставляете их код. Боюсь, что в сети нет никого из тех, кто занимается стеклянными шарами.

Quasimodo's clone 15.09.2018 05:26

@MarkMeyer Спасибо, что исправили. Если вы установите это как ответ, я с радостью приму его.

Aree Vanier 15.09.2018 05:44
Поведение ключевого слова "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) для оценки ваших знаний,...
0
6
38
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны объявить свои переменные с помощью чего-то вроде let profile =

Если вы этого не сделаете, profile и out будут глобальными переменными, что означает, что каждый раз в вашем цикле for вы переназначаете одну общую глобальную переменную. Если у вас есть другой код, который также делает это, будет очень сложно отслеживать. Измените свой код на:

let profile = config["profiles"][i];
let out = {
  "name":profile["name"],
  "version":profile["version"].replace(/_/g, "."),
  "mods":null,
  "saves":null
}

должно помочь.

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