按属性查找多维对象中的最小数值

时间:2016-01-06 22:26:35

标签: javascript arrays object underscore.js

我有一个JSON对象,它是一个对象数组,我希望找到具有最低可能值的对象,该对象不是由给定的属性名称为空。

_.min(arr, function(o){
    return o[prop];
});

是我上次尝试过的,但似乎没有任何选择可以工作或提供我想要的东西。这样做有干净的方法吗?

3 个答案:

答案 0 :(得分:0)

Array.prototype.min = function() {
    var selector = function(a) {
        return a;
    };
    if(arguments.length>0) {
        selector = arguments[0]; //can also check if it's a function if you don't trust yourself or other developers using this extension
    }
    if(this.length==0) return null;
    var min = this[0];
    for(var i=0;i<this.length;i++) {
        if(selector(min)>selector(this[i])) min=this[i];
    }
    return min;
}

//usage
myArr.min(function(obj) {return obj.intProperty;});

答案 1 :(得分:0)

https://lodash.com/docs#sortByOrder

https://lodash.com/docs#isFinite

https://lodash.com/docs#first

_.first(_.sortByOrder(arr, prop, 'asc', _.isFinite))

最干净,最短的方法。

或者如果你不关心无限

https://lodash.com/docs#isNaN

_.first(_.sortByOrder(arr, prop, 'asc', !_.isNaN))

答案 2 :(得分:0)

这是一个纯JavaScript解决方案。不需要额外的库。

var a = [
  {value: null},
  {value: "foo"},
  {value: Infinity},
  {value: 1},
  {value: -2},
  {value: 5},
  {value: 10},
  {value: 5}
]

// Filter away the invalid values
a = a.filter(function(o) {
  return typeof o.value === "number" && Number.isFinite(o.value);
})
// Sort them the way you want
.sort(function(o1, o2) {
  return o1.value > o2.value;
});

// The first object now contains the lowest value
console.log(a);