10

オブジェクトの JavaScript 配列から最大値と最小値を取得する最良の方法は何ですか?

与えられた:

var a = [{x:1,y:0},{x:-1,y:10},{x:12,y:20},{x:61,y:10}];
var minX = Infinity, maxX = -Infinity;
for( var x in a ){
  if( minX > a[x].x )
     minX = a[x].x;
  if( maxX < a[x].x )
     maxX = a[x].x;
}

少しぎこちないようです。おそらく道場を使用して、よりエレガントな方法はありますか?

4

6 に答える 6

10

それはより効率的ではありませんが、にやにや笑うだけです:

var minX = Math.min.apply(Math, a.map(function(val) { return val.x; }));
var maxX = Math.max.apply(Math, a.map(function(val) { return val.x; }));

または、3 行のコードが必要な場合:

var xVals = a.map(function(val) { return val.x; });
var minX  = Math.min.apply(Math, xVals);
var maxX  = Math.max.apply(Math, xVals);
于 2013-09-14T06:16:51.660 に答える
6

この例を使用してください

var lowest = Number.POSITIVE_INFINITY;
var highest = Number.NEGATIVE_INFINITY;
var tmp;
for (var i=myArray.length-1; i>=0; i--) {
    tmp = myArray[i].Cost;
    if (tmp < lowest) lowest = tmp;
    if (tmp > highest) highest = tmp;
}
console.log(highest, lowest);
于 2013-09-14T05:19:24.913 に答える
3

を使用できますsort。このメソッドは元の配列を変更するため、クローンを作成する必要がある場合があります。

var b = [].concat(a); // clones "a"
b.sort(function (a, b) { return a.x - b.x; });
var min = b[0];
var max = b[b.length - 1];
于 2013-09-14T05:36:56.810 に答える
1

別のアイデアは、値を 1 つの値に減らして最大/最小を計算することです。これは、時間の複雑さに関してはあなたのバージョンとまったく同じですが、考え方が少し異なります。( reduce()JavaScript 1.8 以降でサポートされています。)

var getMax = function (field) {
    return a.reduce(function (acc, c) {
        return Math.max(c[field], acc);
    }, -Infinity);
}

var getMin = function (field) {
    return a.reduce(function (acc, c) {
        return Math.min(c[field], acc);
    }, Infinity);
}

console.log(getMax('x')) //61
console.log(getMin('x')) //-1
console.log(getMax('y')) //20
console.log(getMin('y')) //0
于 2013-09-14T05:29:41.593 に答える