Lodash - 检索所有对象属性的值数组

时间:2017-06-06 00:13:43

标签: lodash

我有类似

的东西
const payload = [{'name':'john doe', 'company': 'abc', 'age': 35}, 
                 {'name':'jane doe', 'company': 'def', 'age': 36}]

_.map(users, "name") => ['john doe', 'jane doe']
_.map(users, "company") => ['abc', 'def']

我希望有一个电话从有效负载中检索名称,公司和年龄。我不想用map函数进行3次调用。我怎样才能做到这一点?因为我的有效载荷很大,有很多属性。

谢谢!

2 个答案:

答案 0 :(得分:0)

您可以使用lodash#pick封装在lodash#partial内作为lodash#map的迭代者。

const result = _.map(payload, _.partial(_.pick, _, ['name', 'company']));



const payload = [{
    'name': 'john doe',
    'company': 'abc',
    'age': 35
  },
  {
    'name': 'jane doe',
    'company': 'def',
    'age': 36
  }
];
  
const result = _.map(payload, _.partial(_.pick, _, ['name', 'company']));

console.log(result);

body > div { min-height: 100%; top: 0; }

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

使用lodash,您可以将对象映射到它们的值,并解压缩结果:

&#13;
&#13;
const payload = [{'name':'john doe', 'company': 'abc', 'age': 35}, {'name':'jane doe', 'company': 'def', 'age': 36}];

const result = _(payload)
  .map(_.values) // map to value arrays
  .unzip() // unzip the arrays
  .value();
  
console.log(result);
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
&#13;
&#13;
&#13;

同样的想法在没有lodash的情况下通过将对象映射到值数组,然后使用reduce转置值来实现:

&#13;
&#13;
const payload = [{'name':'john doe', 'company': 'abc', 'age': 35}, {'name':'jane doe', 'company': 'def', 'age': 36}];

const result = payload
  .map(Object.values) // map to value arrays
  .reduce((t, arr) => { // transpose the arrays
    arr.forEach((v, i) => (t[i] || (t[i] = [])).push(v));
      
    return t;
  }, []);

console.log(result);
&#13;
&#13;
&#13;

相关问题