При вызове этого метода .pop для массива, почему я получаю неожиданный результат .length - PullRequest
1 голос
/ 31 января 2020

Я новичок в JS, поэтому, пожалуйста, потерпите меня. Когда я попытался вызвать метод .pop для массива, определенного как secretMessage, который имеет 24 элемента, я использовал синтаксис secretMessage = secretMessage.pop(); Я считаю, что это неправильно. Вызов .length method для массива вернул значение 10, хотя изначально было 24 элемента. Когда я вызвал метод .pop с синтаксисом secretMessage.pop();, у меня не было проблем, и возвращенное значение .length было 23. Почему эта разница в синтаксисе повлияла на длину элементов массива?

let secretMessage = ['Learning', 'is', 'not', 'about', 'what', 'you', 'get', 'easily', 'the', 'first', 'time,', 'it', 'is', 'about', 'what', 'you', 'can', 'figure', 'out.', '-2015,', 'Chris', 'Pine,', 'Learn', 'JavaScript'];

secretMessage = secretMessage.pop();
console.log(secretMessage.length); // Returns 10

secretMessage.pop();
console.log(secretMessage.length); // Returns 23 (assuming the previous mutating method is not called beforehand)

1 Ответ

0 голосов
/ 31 января 2020

Метод js pop удаляет последний элемент из массива и возвращает этот элемент. Это меняет длину массива, как и ожидалось.

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

const plants = ['broccoli', 'cauliflower', 'cabbage', 'kale', 'tomato'];
plants = plants.pop();
console.log(plants); //'tomato'

Вы можете убедиться в этом, проверив следующий код:

const plants = ['broccoli', 'cauliflower', 'cabbage', 'kale', 'tomato'];
console.log(plants.pop());
// expected output: "tomato"
console.log(plants);
// expected output: Array ["broccoli", "cauliflower", "cabbage", "kale"]
plants.pop();
console.log(plants);
// expected output: Array ["broccoli", "cauliflower", "cabbage"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...