Javascript, массивы показывают разную длину в разных местах

1

Я не знаю, что не так с моим массивом. Я хочу проверить элемент в массиве с x и y, равным pos.x и pos.y. Если это не я хочу нажать. Мой код:

checkSteps(pos) {
    for(let i = 0; i < this.path.steps.length; i++){
        if(this.path.steps[i].x == pos.x && this.path.steps[i].y == pos.y) return false;
    }
    this.path.steps.push({
        x: pos.x,
        y: pos.y,
    });
    console.log(this.path);
    return true;
}

Я не знаю, почему я не могу сделать this.path.steps.push(pos); вместо this.path.steps.push({x: pos.x,y: pos.y,});

Этот console.log() дает мне:

Изображение 174551

  • 3
    Понятия не имею, о чем ты спрашиваешь. Можете ли вы уточнить, каким должен быть предполагаемый вывод и почему ваш текущий вывод неверен.
  • 0
    Поскольку весь ваш вопрос окружает this.path.steps , возможно, стоит добавить код для него.
Показать ещё 4 комментария
Теги:
arrays

1 ответ

0
Лучший ответ

Когда вы регистрируете массив или объект (или все, что не является примитивным), консоль показывает строку (фрагмент) объекта/массива в момент возникновения журнала и кэширует ссылку на этот объект/массив.

Когда вы разворачиваете объект/массив позже, консоль использует эту ранее кэшированную ссылку для отображения содержимого объекта/массива. Объект/массив, возможно, был изменен к тому моменту, когда вы его разворачиваете, поэтому консоль дает вам это сообщение:

Изображение 174551

Чтобы сообщить вам, что перечисленные значения только что были (повторно) оценены.

Демонстрация:

Откройте консоль и введите следующее:

var arr = [];
console.log(arr);

setTimeout(function() {
    arr.push(0, 1, 2, 3, 4, 5);
    console.log("Unfold the above array now");
}, 5000);

Подождите, пока сообщение "Unfold the above array now" а затем разворачивайте ранее зарегистрированный пустой массив и посмотрите.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню