Разрушить свойства объекта внутри массива для всех элементов

В своей основной форме, имеющей массив объектов:

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 с деструктуризацией вложенного объекта? (почти уверен, что я перепутал некоторые определения). Кажется, что последнее не поддерживается, но я не встречал никакой документации, которая (и почему) это не будет.

Ответы на вопрос(4)

Ваш ответ на вопрос