Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 21.02.2017, 21:27
Аспирант
Отправить личное сообщение для TimohaP Посмотреть профиль Найти все сообщения от TimohaP
 
Регистрация: 30.06.2014
Сообщений: 56

Вычисление елемента в массиве и отбор за заданными условиями
Сразу хочу предупредить, что для того, что я описываю, Array.find() или что-то типа того совсем не подойдут.
А теперь к сути. У меня есть массив:
[
[1,2],
[8,9],
[1,5]
]

(на самом деле в моем случае массив немножко не такой, но суть та же.)
Мне нужно выбрать из массива такой "подмассив", сумма элементов которого дает наибольший результат. При чем нужно возвращать не сумму, а сами числа, из которых она сформирована.
Например:
blablabla( [ [1,60], [58,60] ] ) == [1,60] (ибо 58-60=2 < 1-60=59)

Последний раз редактировалось TimohaP, 21.02.2017 в 22:04. Причина: орфография
Ответить с цитированием
  #2 (permalink)  
Старый 21.02.2017, 21:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

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]]))
Ответить с цитированием
  #3 (permalink)  
Старый 21.02.2017, 21:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070


сума сумма!!! а на самом деле модуль разницы элементов
Ответить с цитированием
  #4 (permalink)  
Старый 21.02.2017, 22:03
Аспирант
Отправить личное сообщение для TimohaP Посмотреть профиль Найти все сообщения от TimohaP
 
Регистрация: 30.06.2014
Сообщений: 56

рони,
окей, модуль разницы, но на самом деле задача несколько посложнее будет. я просто думал, что это аналогично, но нет.
в массиве хранятся значения координат 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]
Ответить с цитированием
  #5 (permalink)  
Старый 21.02.2017, 22:26
Аспирант
Отправить личное сообщение для TimohaP Посмотреть профиль Найти все сообщения от TimohaP
 
Регистрация: 30.06.2014
Сообщений: 56

окей, я уже разобрался. может не самое адекватное решение, но оно работает
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) );
Ответить с цитированием
  #6 (permalink)  
Старый 21.02.2017, 22:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,070

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))
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вычисление индекса любого элемента в массиве Alexander Belov Events/DOM/Window 15 02.04.2016 01:29