使用lodash从对象列表中获取最大属性?

时间:2015-10-02 02:17:59

标签: javascript lodash

我有一个对象列表:

var objects = [
    {name: 'Fred', age: 63, height: 12},
    {name: 'Jane', age: 32, height: 32},
    {name: 'Dune', age: 12, height: 555}
];

我想弄清楚 all 最大属性是什么:

var maximums = magic(objects);
// {name: 'Jane', age: 63, height: 555}

有没有简单的方法可以做到这一点?无需手动循环。

2 个答案:

答案 0 :(得分:1)

你可以{reduce}循环中的_.merge()对象(lodash或ES5),并使用合并的customizer函数在每次迭代时获取具有最大值的props。



var objects = [
    {name: 'Fred', age: 63, height: 12},
    {name: 'Jane', age: 32, height: 32},
    {name: 'Dune', age: 12, height: 555}
];

var maximums = _(objects).reduce(function(obj, item) {
  return _.merge(obj, item, function(a, b) {
    return a > b ? a : b;
  });
}, {});

document.write(JSON.stringify(maximums));

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

答案 1 :(得分:0)

我无法在没有某种迭代或循环的情况下看到你如何做到这一点:首先是在对象数组上,其次是在每个对象的属性上获得最大值。< / p>

自ES5以来,有一些本机方法可以完成这项工作,但是如果性能很重要,那么普通循环往往更快(而且代码不多)。

&#13;
&#13;
var objects = [
    {name: 'Fred', age: 63, height: 12},
    {name: 'Jane', age: 32, height: 32},
    {name: 'Dune', age: 12, height: 555}
];

var maxes = objects.reduce(function(acc, obj) {
  Object.keys(obj).forEach(function(key) {
    acc[key] = acc[key] > obj[key]? acc[key] : obj[key];
  });
  return acc;
},{});

document.write(JSON.stringify(maxes));
&#13;
&#13;
&#13;