2015-06-22 5 views
5

Это лучше всего объясняется примером. Следующие работы в ES6 создать объект, состоящий из некоторых из ключей существующего объекта:Создайте объект подмножества, состоящий только из некоторых свойств существующего объекта

var o = {a:1, b: 2, c: 3} 
var {a, c} = o 
var subsetObj = {a, c} // will be: {a:1, c:3} 

Есть два минусы здесь:

  1. потребовалось два statments, и две линии, для создания нужного объекта подмножества
  2. Нам пришлось загрязнять локальную область переменных путем создания промежуточных переменных a и c, которые не нужны локально, кроме как средство для создания нашего объекта подмножества.

Есть ли способ сделать то же самое в одном операторе, без введения ненужных местных a и c?

+0

Почему это нужно специальный синтаксис? Почему бы не использовать lodash или что-то еще, например. 'var o = {a: 1, b: 2, c: 3}; _.pick (o, ['a', 'c']) ' – loganfsmyth

+0

Это не * нужно * это, было бы просто приятно. Я бы просто создал вспомогательную функцию, а не приводил во все lodash, если бы мне это очень понравилось. Этот вопрос был конкретно о поддержке родного синтаксиса - проблема сама по себе, очевидно, тривиальна для решения. – Jonah

+1

Полностью, просто хотел упомянуть об этом. – loganfsmyth

ответ

3

Для этого не существует специального синтаксиса. Вы можете продолжать:

var subsetObj = {a: o.a, c: o.c}; 

Если у вас есть другие свойства или переменное количество свойств, создайте вспомогательную функцию.

Похожие: Is it possible to destructure onto an existing object? (Javascript ES6)

+0

Я боялся этого. В этом примере это хорошо, но становится многословным, когда вы заменяете 'a' и' c' длинными именами переменных. – Jonah

Смежные вопросы