找到对象集合的最大值?

时间:2013-12-06 20:03:38

标签: javascript lodash

如何在忽略其中一个键的情况下使用lodash找到对象集合中的最大单元格值。

var data = [{
            tick: 0,
            valueA: 3,
            valueB: 2
        }, {
            tick: 6,
            valueA: 6,
            valueB: 3
        }, {
            tick: 12,
            valueA: 2,
            valueB: 4
        }, ...];

我想找到最大标记,这是行标识符,以及所有其他值的最大值。到目前为止我所拥有的是:

var maxTick = _.max(data, 'tick'),
    maxValue = _.max(data, function(o) { return _.max(_.values(o))};);

如何让maxValue忽略刻度数据?

3 个答案:

答案 0 :(得分:4)

沿着T Nguyen的思路,但使用_.omit而不是那样选择你只需省略tick

_.max(data, function(o){_.omit(o, "tick")})

答案 1 :(得分:1)

您只需要一个迭代所有元素属性和被忽略属性列表的函数。 这是一个示例:

var  findMax = function(list, ignoredFields){
    var maxValue = null;
    for(var i=0;i<list.length;i++){
        for(var prop in list[i]){
            if(ignoredFields.indexOf(prop) < 0){
                maxValue = maxValue < list[i][prop] ? list[i][prop] : maxValue;
            }
        }
    }
    return maxValue;
}

然后使用您的数据和被忽略的属性列表执行该功能

findMax(data,['tick'])

更新:修改了使用lodash迭代的函数

var  findMax = function(list, ignoredFields){
    var maxValue = null;
    _.forEach(list, function(element, index) {
        var _localMax = _.max(_.omit(element, ignoredFields));
        maxValue = maxValue < _localMax ? _localMax : maxValue;
    });
    return maxValue;
}

答案 2 :(得分:0)

尝试使用_.pick()来挑选除tick之外的所有键,然后在该新集合上运行max函数。顺便说一下,你的maxValue函数似乎不正确。你是说你想在任何对象中获取最高的标量值,或者包含最高标量值的对象(除了tick)?

更新:根据您的回复,请尝试以下操作:http://jsfiddle.net/tonicboy/Xxf9E/1/

var data = [{
            tick: 0,
            valueA: 3,
            valueB: 2
        }, {
            tick: 6,
            valueA: 6,
            valueB: 3
        }, {
            tick: 12,
            valueA: 2,
            valueB: 4
        }],
    data2 = [];

_.each(data, function(element, index) {
    var values = _.values(_.omit(element, 'tick'));
    data2 = data2.concat(values);
});

console.log(data2);
console.log(_.max(data2));