У меня есть массив объектов, я хочу удалить несколько свойств этого объекта, вызвав функцию и передав массив и ключ, который я хочу удалить.
Я сослался на ответ это о переполнении стека, и он работает, когда я указываю ключ вручную, например id
. Он удаляет свойство id
каждого объекта в массиве.
const newArray = array.map(
({
id,
...otherAttributes
}) => otherAttributes
);
Но когда я передаю ключ функции, а затем использую ключ из параметра, он не может обнаружить ключ в объекте и поэтому не может его удалить. Тело функции примерно такое:
removeKeyFromObjectsArray(newArray, key) {
const newArray = products.map(
({
key,
...otherAttributes
}) => otherAttributes
);
return newArray;
Я вызываю эту функцию с помощью this.removeKeyFromObjectsArray(this.updatedProducts, 'id')
, но объекты внутри этого массива все еще имеют ключ. (this
потому, что он находится внутри приложения Vue, и мне нужно обратиться к другой функции в том же экземпляре).
Эта функция работает, если мы вручную указываем имя ключа, например id
, но она не работает, когда мы передаем строку ключа через параметр, а затем используем его, может ли кто-нибудь объяснить, в чем здесь проблема и как ее решить?
🤔 А знаете ли вы, что...
JavaScript можно использовать для создания анимаций и игр на веб-страницах.
Чтобы использовать имена вычисляемых свойств при деструктуризации, вам нужно обернуть key
с []
и присвоить его новой переменной (в данном случае _
). В противном случае он деструктурирует свойство с именем "key"
из объекта, а не свойство с стоимость в переменной key
function removeKeyFromObjectsArray(products, key) {
const newArray = products.map(
({
[key]: _,
...otherAttributes
}) => otherAttributes
);
return newArray;
}
console.info(
removeKeyFromObjectsArray([{ id: 1, name: 'name1'},
{ id: 2, name: 'name2'}], 'name')
)
Это удаление литерала key
- используйте нотацию динамического свойства с квадратными скобками []
, чтобы получить желаемый результат:
const newArray = products.map(({ [key]: _, ...otherAttributes }) => otherAttributes);
Причина, по которой я назначаю нежелательную клавишу _
выше, заключается в том, что принято использовать _
как «нежелательную» или «игнорировать эту» клавишу. Обратите внимание, что это отличается от префикс ключа с _
(_key
), что означает «не изменяйте это напрямую - вместо этого используйте геттеры или сеттеры».