(Updated) Here's the answer of question you mentioned in comment.
a.sort(function(a, b) {
if (a.dnf != b.dnf) {
return a.dnf ? 1 : -1;
}
if (!(a.dnf && b.dnf) && a.isCut != b.isCut) {
return a.isCut ? 1 : -1;
}
if (a.score != b.score) {
return b.score - a.score; // descending
}
return b.id - a.id; // descending
});
Result:
[
{"id":4,"score":4,"isCut":false,"dnf":false}, // the rest: order by score, id
{"id":3,"score":3,"isCut":false,"dnf":false}, //
{"id":2,"score":2,"isCut":false,"dnf":false}, //
{"id":1,"score":1,"isCut":false,"dnf":false}, //
{"id":10,"score":0,"isCut":false,"dnf":false}, //
{"id":11,"score":-1,"isCut":false,"dnf":false}, //
{"id":13,"score":-3,"isCut":false,"dnf":false}, //
{"id":14,"score":-4,"isCut":false,"dnf":false}, //
{"id":15,"score":-5,"isCut":false,"dnf":false}, //
{"id":16,"score":10,"isCut":true,"dnf":false}, // isCut: order by score, id
{"id":9,"score":9,"isCut":true,"dnf":false}, //
{"id":8,"score":8,"isCut":true,"dnf":false}, //
{"id":7,"score":7,"isCut":true,"dnf":false}, //
{"id":6,"score":6,"isCut":true,"dnf":false}, //
{"id":5,"score":5,"isCut":true,"dnf":true}, // dnf: order by score, id
{"id":12,"score":-2,"isCut":false,"dnf":true} //
]