Вычисление елемента в массиве и отбор за заданными условиями
Сразу хочу предупредить, что для того, что я описываю, 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, время: 23:37. |