Вычисление елемента в массиве и отбор за заданными условиями
Сразу хочу предупредить, что для того, что я описываю, Array.find() или что-то типа того совсем не подойдут.
А теперь к сути. У меня есть массив: [ [1,2], [8,9], [1,5] ] (на самом деле в моем случае массив немножко не такой, но суть та же.) Мне нужно выбрать из массива такой "подмассив", сумма элементов которого дает наибольший результат. При чем нужно возвращать не сумму, а сами числа, из которых она сформирована. Например: blablabla( [ [1,60], [58,60] ] ) == [1,60] (ибо 58-60=2 < 1-60=59) |
TimohaP,
function a(d) {
return d.reduce(function(b, c) {
return Math.abs(b[0] - b[1]) > Math.abs(c[0] - c[1]) ? b : c
})
};
alert(a([ [1,60], [58,60] ]))
alert(a([ [1,2],[8,9],[1,5]]))
|
:write:
|
рони,
окей, модуль разницы, но на самом деле задача несколько посложнее будет. я просто думал, что это аналогично, но нет. в массиве хранятся значения координат x0, y0, x1, y1, и среди них нужно выбрать те, которые дадут наибольшую длину. формула длины: Math.sqrt( Math.pow(x1-x0, 2) + Math.pow(y1-y0, 2) ) вот к примеру: longest ( [ [ 0,0,20,20 ], [ 0,0,10,10 ] ] ) = [0,0,20,20] |
окей, я уже разобрался. может не самое адекватное решение, но оно работает
var array = [
[ 0,0,20,20 ],
[ 0,0,10,10 ]
];
function longest(array){
var lengths = array.map( function(i){ return Math.sqrt( Math.pow(i[2]-i[0], 2) + Math.pow(i[3]-i[1], 2) ) } );
return array[ lengths.indexOf( Math.max.apply(null, lengths) ) ];
}
alert( longest(array) );
|
TimohaP,
function g(x0, y0, x1, y1)
{
return Math.sqrt( Math.pow(x1-x0, 2) + Math.pow(y1-y0, 2) )
}
function a(d) {
return d.reduce(function(b, c) {
return g.apply(null,b) > g.apply(null,c) ? b : c
})
};
var array = [
[ 0,0,20,20 ],
[ 0,0,10,10 ]
];
alert(a(array))
|
| Часовой пояс GMT +3, время: 10:32. |