#javascript #arrays
#javascript #массивы
Вопрос:
Я делаю:
const array = []
...
array.push({x, y})
Это считается плохой практикой. Должен ли я использовать let или spread массив, потому что «push» считается мутирующим действием. Тем не менее, он работает.
Комментарии:
1. Зависит от того, хотите ли вы избежать изменения массива? Обратите внимание, что мутация сама по себе неплоха, зависит от вашего варианта использования.
2. Я преувеличиваю, но это все равно, что спросить: «Можно ли добавить два числа или я должен их умножить?». Это действительно зависит от того, что вы хотите / нуждаетесь в результате.
3. Я не понимаю вопроса, вы не уверены в том, что означает mutate ? (название подразумевает, что вы, кажется, не уверены в этом, но тело немного отличается)
4. «Должен ли я использовать let» . У вас сложилось впечатление, что вам не разрешены
push
массивы, определенные сconst
помощью? Вам НЕ разрешено переназначать переменные сconst
помощью likearray = [1,2]
. Вам разрешено изменять массивы и объекты, изменяя их свойства. Какconst a = {}
иa.key1 = 'value'
разрешено. Но,a = { key2: 'value 2 '}
не допускается5. Это именно тот случай использования. Массив, в который я помещаю объект. Теперь я вижу, что изменение массива обычно не является проблемой и может быть выполнено с помощью const .
Ответ №1:
Array.push() изменяет массив?
ДА
Это считается плохой практикой. Должен ли я использовать let или spread массив, потому что «push» считается мутирующим действием.
Как правило, нет.
Бывают случаи, когда обработка данных как неизменяемых полезна или даже необходима (например, при обновлении хранилища Redux).
В этих случаях push
все еще неплохая идея, вы просто не должны делать это с вашим исходным массивом.
Например, это нормально и не имеет побочных эффектов:
function functionalFunction(input) {
const output = [...input];
output.push({x, y});
// A bunch of other operations that mutate the array go here
// Be careful not to mutate any objects in the array
return output;
}