Rank the top k brands by rating, breaking ties with the review count. This builds on v4's repeated search (not on v5: there is no filtering here); only the comparison gets a second criterion.
You start with:
const brands = ["TechPro", "MegaCorp", "NeoByte", "Quantum", "Zenith"];
const ratings = [4, 5, 5, 3, 4];
const reviews = [200, 150, 500, 100, 300];
const k = 3;
Build:
1. NeoByte (5, 500) 2. MegaCorp (5, 150) 3. Zenith (4, 300)
Rules:
- Rating decides first: the higher rating wins.
- If two brands have the same rating, the one with more reviews wins.
- If rating and reviews are both equal, the one listed first wins (the test data has no such pair, but your code must follow the rule).
kis never larger than the number of brands.- Each line is
"rank. Brand (rating, reviews)", starting at rank 1. - Print the lines, one per line, with
console.log(...).
Start from v4: the same
const used = new Array(ratings.length).fill(false); and const lines = [];, the same two loops. Only the comparison inside the inner loop changes.
Use a chain (if / else if / else if): no candidate yet, take this one; else a higher rating, take this one; else the same rating and more reviews, take this one.
const brands = ["TechPro", "MegaCorp", "NeoByte", "Quantum", "Zenith"];
const ratings = [4, 5, 5, 3, 4];
const reviews = [200, 150, 500, 100, 300];
const k = 3;
const used = new Array(ratings.length).fill(false);
const lines = [];
for (let rank = 1; rank <= k; rank++) {
let bestIndex = -1;
for (let i = 0; i < ratings.length; i++) {
if (!used[i]) {
if (bestIndex === -1) {
bestIndex = i;
}
else if (ratings[i] > ratings[bestIndex]) {
bestIndex = i;
}
else if (ratings[i] === ratings[bestIndex] && reviews[i] > reviews[bestIndex]) {
bestIndex = i;
}
}
}
used[bestIndex] = true;
lines.push(rank + ". " + brands[bestIndex] + " (" + ratings[bestIndex] + ", " + reviews[bestIndex] + ")");
}
console.log(lines.join("\n"));
Free plan: 30 tutor messages. Premium is unlimited.
Saved
Ctrl + Enter to check
