我有一个对象列表:
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}
有没有简单的方法可以做到这一点?无需手动循环。
答案 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;
答案 1 :(得分:0)
我无法在没有某种迭代或循环的情况下看到你如何做到这一点:首先是在对象数组上,其次是在每个对象的属性上获得最大值。< / p>
自ES5以来,有一些本机方法可以完成这项工作,但是如果性能很重要,那么普通循环往往更快(而且代码不多)。
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;