10

配列から最小値を取得したいのですが。データに値が含まれている場合は、値nullMath.min.apply返します。このJSFiddleの例を参照してください。配列にnull値が存在する場合でも、どうすれば真の最小値を取得できますか?0null

コード(JSFiddleの例と同じ):

var arrayObject= [ {"x": 1, "y": 5}, {"x": 2, "y": 2}, {"x": 3, "y": 9}, {"x": 4, "y": null}, {"x": 5, "y": 12} ];

var max = Math.max.apply(Math, arrayObject.map(function(o){return o.y;}));
var min = Math.min.apply(Math, arrayObject.map(function(o){return o.y;}));

$("#max").text(max);
$("#min").text(min);
4

7 に答える 7

12

さて、の数値nullはです0。値を考慮したくない場合はnull、それらを除外する必要があります。

var values = arrayObject.map(function(o){
    return o.y;
}).filter(function(val) {
    return val !== null
});

参照Array#filter

于 2012-08-05T16:02:01.927 に答える
8

Felixのソリューションの代替:最小呼び出しと最大呼び出しをそれぞれまたは無限大nullとして扱います。+-

var max = Math.max.apply(Math, arrayObject.map(function(o) {
    return o.y == null ? -Infinity : o.y;
}));
var min = Math.min.apply(Math, arrayObject.map(function(o) {
    return o.y == null ? Infinity : o.y;
}));
于 2012-08-05T16:05:12.700 に答える
4

nullプロパティをマッピングし、値を除外しMath.min/max、(他の回答で示唆されているように) 適用する代わりに、ロジックを直接適用することで、reduce関数を使用すると時間とコードを節約できると思います。

var arrayObject= [ {"x": 1, "y": 5}, {"x": 2, "y": 2}, {"x": 3, "y": 9}, {"x": 4, "y": null}, {"x": 5, "y": 12} ];
var min = var arrayObject.reduce(function(m, o) {
    return (o.y != null && o.y < m) ? o.y : m;
}, Infinity);
var max = var arrayObject.reduce(function(m, o) {
    return (o.y != null && o.y > m) ? o.y : m;
}, -Infinity);
于 2012-08-05T16:13:24.513 に答える
0
var validArray = $.grep( arrayObject, function(item, _){
                    return item.y != null;
               });
//That gives a new array without null values for "y"

今やる..

var min = Math.min.apply(Math, validArray.map(function(o){return o.y;}));
于 2012-08-05T16:03:17.727 に答える