Для того, что вы хотите сделать, обычная сортировка (даже с пользовательской функцией), скорее всего, не сработает для всего.
Однако вы должны использовать ее, чтобы получить элементы в хорошем порядке длядальнейшая обработка.Сортируйте сначала по началу, затем по концу.
Затем, если вы добавите флаг «грязный» к каждому набору данных, это станет намного проще.
var obj = [
{"begin":0, "end":20, "dirty": false},
{"begin":30, "end":300, "dirty": false},
{"begin":40, "end":60, "dirty": false},
{"begin":40, "end":50, "dirty": false},
{"begin":80, "end":100, "dirty": false},
{"begin":80, "end":100, "dirty": false},
{"begin":350,"end":370, "dirty": false}
];
function getNextSet(arr)
{
var ret = [];
var lastEnd = -1;
for (var i = 0; i < arr.length; i++)
{
if (arr[i].begin >= lastEnd && arr[i].dirty == false)
{
ret.push(arr[i]);
arr[i].dirty = true;
lastEnd = arr[i].end;
}
}
return ret;
}
// do custom sorting as mentioned in the other answer to get in a good starting state
var set = [];
do {
set = getNextSet(obj);
// do whatever
} while (set.length != 0);