如何用lodash深入挑选另一个人?

时间:2019-02-25 20:21:29

标签: javascript lodash

现在我有这样的代码:

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 :(得分:3)

您可以在没有破折号的情况下进行深度破坏:

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);

答案 1 :(得分:1)

如果您坚持使用Lodash,请考虑使用_.get()函数:

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

因此,对于要获取的属性:

const selectedProps = {
  ..._.pick(object, ['a', 'b']),
  _.get(object, 'c.d')
}

答案 2 :(得分:0)

您可以创建一个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>