Разрушить свойства объекта внутри массива для всех элементов
В своей основной форме, имеющей массив объектов:
let arr = [
{val:"a"},
{val:"b"}
];
Как можно использовать деструктуризацию, чтобы получить только значения['a', 'b']
.
получить первое значение легко:
let [{val:res}] = arr; //res contains 'a'
Получить все значения внутри массива можно с помощью оператора rest:
let [...res] = arr; //res contains all objects
Объединяя их, я ожидал, что смогу использовать:
let [...{val:res}] = arr; //undefined, expected all 'val's (['a', 'b'])
Вышеуказанное возвращает неопределенное значение (протестировано в FF). Некоторое дальнейшее тестирование, по-видимому, показывает, что добавление оператора rest при использовании также деструктуризации объекта не использует итерацию, но возвращает исходный объект, например,let [...{length:res}] = arr; //res= 2
, Некоторые другие испытания, такие какlet [{val:...res}] = arr;
или жеlet [{val}:...res] = arr;
производить синтаксические ошибки.
Это достаточно легко сделать с помощью других методов, таких как использованиеmap
в массиве, но в основном я сталкиваюсь с этой проблемой при деструктурировании нескольких уровней (массив с объектами, у которых есть собственное свойство, содержащее массив). Поэтому я действительно пытаюсь понять, как сделать это исключительно с помощью деструктуризации. Для удобства:тестовая скрипка
редактировать
Мои извинения, если я не смог объяснить цель вопроса. Я не ищу решение конкретной проблемы, только чтобы найти правильный синтаксис для использования при деструктуризации.
В противном случае первым вопросом будет: почему в приведенном выше примереlet [...{val:res}] = arr;
вернуть все значения (['a', 'b']
). Второй вопрос: каков правильный синтаксис для использования оператора rest с деструктуризацией вложенного объекта? (почти уверен, что я перепутал некоторые определения). Кажется, что последнее не поддерживается, но я не встречал никакой документации, которая (и почему) это не будет.