Javascript внутренне изменяет значения массива, какое-нибудь исправление? - PullRequest
2 голосов
/ 28 марта 2019

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

Я использую консоль Google Chrome.

Я уже видел другое переполнение стека, говорящее, что этоЭто известная «ошибка», но разработчики не будут ее исправлять, потому что на самом деле это не ошибка.

Вот что я вижу в консоли:

 (2) ["a6", "a5"]
0: "`6"
1: "b6"
length: 2
__proto__: Array(0)

Как видите,значения в массиве, которые я вижу, отличаются от значений, которые хранятся в массиве.И это вызывает много других проблем в моей программе, которые зависят от содержимого этого массива.

Я хочу знать, является ли это распространенным явлением, а также есть ли какое-либо исправление.Или, может быть, некоторые сценарии, в которых происходят подобные случаи.

Кроме того, я все еще не уверен, для массива, показанного выше ^, являются фактические значения массива, значения, которые я вижу ("a6" и "a5"), или неверные значения, показанные внутри ("` 6 "и" b6 ").

Пожалуйста, помогите, если это не сработает, будет чрезвычайно трудно закончить проект, над которым я работаю.

Вот код, который я использую для обновления массива:

let moves = [];
 if (tile.slice(1, 2) == 7 && b1.board[dd].piece == null && b1.board[d].piece == null) {
            moves.push(d);
            moves.push(dd);
        }
        if (tile.slice(1, 2) == 7 && b1.board[d].piece == null && b1.board[dd].piece != null) {
            moves.push(d);
        }
        if (parseInt(tile.slice(1, 2)) > 1 && tile.slice(1, 2) != 7 && b1.board[d].piece == null) {
            moves.push(d);
        }
        if (tile.charCodeAt(0) > 97 && parseInt(tile.slice(1, 2)) > 1 && b1.board[ld].piece != null && b1.board[ld].piece.slice(0, 1) == "w") {
            moves.push(ld);
        }
        if (tile.charCodeAt(0) < 104 && parseInt(tile.slice(1, 2)) > 1 && b1.board[rd].piece != null && b1.board[rd].piece.slice(0, 1) == "w") {
            moves.push(rd);
        }
        console.log(moves);

, просто для обеспечения некоторого контекста, я создаю массив, называемый move.Я помещаю значения в массив, основываясь на некоторых условиях.Затем я записываю массив на консоль, что я и показал выше.

Операторы if работают, потому что значения, которые я вижу в массиве, верны.Но, как вы знаете, после нажатия и проверки внутренних значений в консоли они становятся неправильными.

Результат, который я ожидаю получить от консоли:

 (2) ["a6", "a5"]
0: "a6"
1: "a5"
length: 2
__proto__: Array(0)

Как это исправитьпроблема?

1 Ответ

0 голосов
/ 28 марта 2019

Не уверен, что это является причиной, но когда console.log, Chrome и другие браузеры не выводят сериализованные значения массивов / объектов, а просто сохраняют ссылку на них. Позже, когда вы будете проверять эти массивы / объекты, Chrome покажет текущие значения в этих массивах, а не значения, которые присутствовали на момент регистрации.

Попробуйте войти с console.log(JSON.stringify(thingToLog)). Или еще лучше с console.log(JSON.stringify(thingToLog, undefined, ' ')).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...