2015-01-16 5 views
-1

У меня есть этот массив с объектами внутри:Найти мин, макс в массив с объектами

var pts = [ 
    { "X": 52.67528921580262, "Y": 8.373513221740723 }, 
    { "X": 52.6759657545252, "Y": 8.374114036560059 }, 
    { "X": 52.682574466310314, "Y": 8.37256908416748 }, 
    { "X": 52.68356308524067, "Y": 8.373942375183105 }, 
    { "X": 52.68293869694087, "Y": 8.375487327575684 }, 
    { "X": 52.67685044320001, "Y": 8.376259803771973 }, 
    { "X": 52.6756535071859, "Y": 8.379607200622559 }, 
    { "X": 52.676017795531436, "Y": 8.382096290588379 }, 
    { "X": 52.68101344348877, "Y": 8.380722999572754 }, 
    { "X": 52.68351105322329, "Y": 8.383641242980957 }, 
    { "X": 52.68,    "Y": 8.389    } 
]; 

Как я могу найти мин, макс для X и мин, макс для Y?

+1

Вы пробовали цикл по массиву и сравнения значений с четырьмя переменными для {х/у} {мин/макс}? Если вы пробовали это, какая часть этого подхода дает вам проблемы? – apsillers

+0

Сохраните первые объекты x и y как min и max для x и y. Затем прокрутите остальные объекты. Для каждого объекта сравните объекты x и y с min и max для x и y. Если вы нашли новый min или max для x или y, замените его старым. – forgivenson

ответ

4

Вы могли бы назвать Math.min и Math.max, переходящая в отображенной массив, содержащий только соответствующие значения, как это:

function endProp(mathFunc, array, property) { 
    return Math[ mathFunc ].apply(array, array.map(function (item) { 
     return item[ property ]; 
    })); 
} 

var maxY = endProp("max", pts, "Y"), // 8.389 
    minY = endProp("min", pts, "Y"); // 8.37256908416748 
+0

забавное применение –

1

Это, вероятно, будет проще отсортировать массив.

array.sort(function minXToMaxX(a,b){ 
    return a.x - b.x; 
}); 

Самая низкая x значение при array[0]. Наибольшее значение x - значение array[array.length - 1];

1

Этот код работает нормально. См. Snippt для демонстрации.

var pts = [{ 
 
    "X": 52.67528921580262, 
 
    "Y": 8.373513221740723 
 
}, { 
 
    "X": 52.6759657545252, 
 
    "Y": 8.374114036560059 
 
}, { 
 
    "X": 52.682574466310314, 
 
    "Y": 8.37256908416748 
 
}, { 
 
    "X": 52.68356308524067, 
 
    "Y": 8.373942375183105 
 
}, { 
 
    "X": 52.68293869694087, 
 
    "Y": 8.375487327575684 
 
}, { 
 
    "X": 52.67685044320001, 
 
    "Y": 8.376259803771973 
 
}, { 
 
    "X": 52.6756535071859, 
 
    "Y": 8.379607200622559 
 
}, { 
 
    "X": 52.676017795531436, 
 
    "Y": 8.382096290588379 
 
}, { 
 
    "X": 52.68101344348877, 
 
    "Y": 8.380722999572754 
 
}, { 
 
    "X": 52.68351105322329, 
 
    "Y": 8.383641242980957 
 
}, { 
 
    "X": 52.68, 
 
    "Y": 8.389 
 
}]; 
 
var xobj = []; 
 
var yobj = []; 
 
var len = pts.length; 
 

 
for (var i = 0; i < len; i++) { 
 

 
    xobj.push(parseFloat(pts[i].X)); 
 
    yobj.push(parseFloat(pts[i].Y)); 
 
} 
 

 
//height x value 
 
var value = xobj[0]; 
 
for (var n = 1; n < xobj.length; n++) { 
 
    if (xobj[n] > value) { 
 
    value = xobj[n]; 
 
    } 
 
} 
 

 
//lowest x value 
 
var valuel = xobj[0]; 
 
for (var n = 1; n < xobj.length; n++) { 
 
    if (xobj[n] < valuel) { 
 
    valuel = xobj[n]; 
 
    } 
 
} 
 

 
//height y value 
 
var valueY = yobj[0]; 
 
for (var n = 1; n < yobj.length; n++) { 
 
    if (yobj[n] > valueY) { 
 
    valueY = yobj[n]; 
 
    } 
 
} 
 

 
//lowest x value 
 
var valuelY = yobj[0]; 
 
for (var n = 1; n < yobj.length; n++) { 
 
    if (yobj[n] < valuelY) { 
 
    valuelY = yobj[n]; 
 
    } 
 
} 
 

 
document.getElementById("demo").innerHTML = valuel 
 

 
document.getElementById("demo1").innerHTML = value 
 

 
document.getElementById("demo2").innerHTML = valuelY 
 

 
document.getElementById("demo3").innerHTML = valueY
Minx: 
 
<p id="demo"></p> 
 
MaxX: 
 
<p id="demo1"></p> 
 
Miny: 
 
<p id="demo2"></p> 
 
MaxY: 
 
<p id="demo3"></p>

Смежные вопросы