Удаление атрибута из массива объектов по ключевой строке - PullRequest
1 голос
/ 07 июля 2019

У меня есть массив объектов, я хочу удалить несколько свойств этого объекта, вызвав функцию и передав массив и ключ, который я хочу удалить.

Я ссылался this ответить на переполнение стека, и оно работает, когда я вручную задаю ключ, например 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, но она не работает, когда мы передаем строку ключа через параметр, а затем используем его, может кто-нибудь объяснить, в чем здесь проблема и как можноЯ это решаю?

Ответы [ 2 ]

3 голосов
/ 07 июля 2019

Чтобы использовать вычисленные имена свойств при уничтожении , вам нужно обернуть key с помощью [] и назначить его новой переменной (_ в этом случае).В противном случае он будет деструктурировать свойство с именем "key" из объекта, а не свойство со значением в переменной key

function removeKeyFromObjectsArray(products, key) {
    const newArray = products.map(
      ({
        [key]: _,
        ...otherAttributes
      }) => otherAttributes
    );
    return newArray;
}

console.log(
  removeKeyFromObjectsArray([{ id: 1, name: 'name1'},
                            { id: 2, name: 'name2'}], 'name')
)
1 голос
/ 07 июля 2019

Это удаляет литерал key - используйте динамическое обозначение свойства в квадратных скобках [], чтобы получить желаемый результат:

const newArray = products.map(({ [key]: _, ...otherAttributes }) => otherAttributes);

Причина, по которой я назначаю нежелательный ключ для _выше, потому что принято использовать _ как «нежелательный» или «игнорировать этот» ключ.Обратите внимание, что это отличается от префикса ключа с _ (_key), что означает «не изменяйте это напрямую - используйте вместо этого методы получения или установки».

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