Чтобы узнать Угловой 2, я использовал Connect Four game с Угловым CLI, когда он использовался SystemJS.Почему JSON.parse меняет значения в вложенных массивах?
Я тиражирование усилия с нуля с новым CLI WebPack на основе и у меня возникли странные проблемы ...
Следующий метод получает строку JSON-кодированные данные и инициализирует новый экземпляр игры с Это. Я добавил несколько console.log
, чтобы показать проблему:
export class ConnectFourGameModel {
static fromJSON(jsonString: any): ConnectFourGameModel {
let jsonData = JSON.parse(jsonString);
console.log('*** from JSON (compare the "columns" array between jsonString and jsonData below) ***');
console.log('jsonString: ', jsonString);
console.log('jsonData: ', jsonData);
...
return result;
}
Когда это работает, первый console.log
показывает строку JSON правильно:
jsonString:
{... Several fields here ...
"columns":[[0,0,0,0,0,1],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0],[0,0,0,0,0,0]]
}
Но второй console.log
, который является только результатом вызова JSON.parse
на этой строке, казалось бы, случайным образом изменяет значение:
jsonData:
> Object {... Several fields here ...
> columns: Array[15]
V 0: Array[6]
0: 2 <-- Should be 0
1: 2 <-- Should be 0
2: -1 <-- Should be 0
etc...
Почему это Хаппа Ening?
Возможно, вы увидите, что лучше, если вы load the app on Github Pages, откройте консоль JavaScript в браузере и щелкните по любому столбцу, чтобы сделать ход.
Хранилище находится на Github: https://github.com/cmermingas/connect-four-webpack
Я искал вопросы здесь относительно разбора вложенных массивов с JSON.parse, но я не мог связать этот вопрос с теми, которые я нашел.
Большое спасибо!
Вы изменения данных. Объекты, показанные с помощью 'console.log', являются * live *, поэтому будут внесены изменения в их свойства, даже после регистрации. – Phil
Что сказал @Phil. Если вы установите точку останова на строке 'console.log', вы также проведете проверку' jsonData', где вы увидите, что это действительно 1: 1 декодирование 'jsonString'. – Siguza