Один хороший вариант использования функции деструктуризации при использовании с параметрами покоя заключается в том, что вы можете получить обрезанные клоны.
var source = { w1: 'val1', w2: 'val2', unwanted1: 'val3', unwanted2: 'val4'};
var {unwanted1, unwanted2, ...target} = source;
console.log(target); // `{ w1: 'val1', w2: 'val2' }` Exactly what you want
Однако побочный эффект заключается в том, что ваша область теперь загрязнена двумя переменными, которые вы никогда не захотите использовать: unwanted1
и unwanted2
.
Если _
означает, что вам все равно, вы можете сделать что-то вроде этого
var {
unwanted1:_, // throw away
unwanted2:_, // throw away
target
} = source;
Однако в Javascript _
- правильный идентификатор. Если один раз использовать его таким образом (unwanted: _
), вы получите одну нежелательную переменную с именем _
, которая идет вразрез с целью. Если используется более одного раза, как указано выше, выдается ошибка:
SyntaxError: Identifier '_' has already been declared
.
Можно ли как-нибудь отбросить нежелательные артефакты / переменные разрушения?
Разумеется, всегда доступны следующие решения:
var target = {
w1: source.w1,
w2: source.w2,
}
и
var target = {...source};
delete target.unwanted1;
delete target.unwanted2;
Однако делать это с помощью деструктурирования кажется самым чистым способом, если вы клонируете объект со многими параметрами, и вам нужно исключить только пару.