Как глубоко выбрать другой вариант с помощью lodash? - PullRequest
0 голосов
/ 25 февраля 2019

Теперь у меня есть такой код:

var object = {
   a: 'a',
   b: 'b',
   c: {
       d: 'd'
   }
}
_.get(object).pick(['a', 'b']).value();

Как глубоко выбрать свойство 'd', например:

_.get(object).pick(['a', 'b', 'c.d']).value();

Ответы [ 3 ]

0 голосов
/ 25 февраля 2019

Если вы настаиваете на использовании Lodash, рассмотрите возможность использования функции _. Get () :

_.get(object, 'c.d');

Итак, для свойств, которые вы хотите получить:

const selectedProps = {
  ..._.pick(object, ['a', 'b']),
  _.get(object, 'c.d')
}
0 голосов
/ 26 февраля 2019

Вы можете создать функцию flatPick().Функция повторяет массив путей.и использует _.get() для получения значения path и _.set() для добавления последней части пути в качестве свойства к результирующему объекту:

function flatPick(object, paths) {
  const o = {};

  paths.forEach(path => _.set(
    o,
    _.last(path.split('.')),
    _.get(object, path)
  ));

  return o;
}

var object = {
  a: 'a',
  b: 'b',
  c: {
    d: 'd',
    e: {
      f: 'f'
    }
  }
};

var result = flatPick(object, ['a', 'b', 'c.d', 'c.e.f']);

console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.11/lodash.js"></script>
0 голосов
/ 25 февраля 2019

Вы можете глубоко деструктировать без lodash:

var object = {
  a: 'a',
  b: 'b',
  c: {
      d: 'd'
  }
}

const { a, b, c :{ d }} = object;

console.log(a,b,d);

const obj = {a, b, d};

console.log(obj);
...