我有一个JSON对象,它是一个对象数组,我希望找到具有最低可能值的对象,该对象不是由给定的属性名称为空。
_.min(arr, function(o){
return o[prop];
});
是我上次尝试过的,但似乎没有任何选择可以工作或提供我想要的东西。这样做有干净的方法吗?
答案 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
_.first(_.sortByOrder(arr, prop, 'asc', _.isFinite))
最干净,最短的方法。
或者如果你不关心无限
_.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);