2
* @param {number[]} values3
* @param {number[]} labels4
* @param {number} numWanted5
* @param {number} useLimit8
var largestValsFromLabels = function (values, labels, numWanted, useLimit) {9
// this sortValues will create an addition array that keep track of the value idx after descending sort10
// which is useful to map the labels accordingly11
let sortValues = values.map((val, idx) => [val, idx]),13
sortValues.sort((a, b) => b[0] - a[0]);15
for (let [val, idx] of sortValues) {16
sortLabels.push(labels[idx]);18
values.sort((a, b) => b - a);24
while (i < values.length && numWanted > 0) {25
if (map[labels[i]]) map[labels[i]]++;26
else map[labels[i]] = 1;28
if (map[labels[i]] <= useLimit) {