вот такой образчик кода
где-то сверху функции
arr=[];
где-то глубоко внутри нескольких вложенных циклов
var N1 = ... сложения, умножения элементов других массивов
var N2 = ... сложения, умножения элементов других массивов
var elem = {polza:N1, cena:N2, id:N3};
var add = del = true;
while (del){
del = false;
for (var i = 0; i < arr.length; ++i){
if ((arr[i].polza >= elem.polza) && (arr[i].cena <= elem.cena)){
add=false; break;
}
if ((arr[i].polza <= elem.polza) && (arr[i].cena >= elem.cena)){
del = true;
arr.splice(i,1);
--i;
continue;
}
}
}
if (add) arr.push(elem);
обычными словами что делает код - он ищет подмножество элементов, обладающих лучшим соотношением качество:стоимость. То есть, если на вход "чёрного ящика" подать
[{5,3}, {2,7}, {2,1}, {8,7},{6,5},{3,2},{4,5}, {4,2}, {2,1}]
- то на выходе мы должны получить
{5,3}, {2,1}, {8,7}, {6,5}, {4,2}
последовательность входящих элементов никак не отсортирована, итоговый array создаётся в процессе работы, и при необходимости его можно делать упорядоченным по любому из нужных полей (если будет происходить какая-то оптимизация от этого; так как в итоге там 10-15 элементов остаётся, и окончательная сортировка - не проблема по времени).