如何在忽略其中一个键的情况下使用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
忽略刻度数据?
答案 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));