Erect the Fence LeetCode solution in JavaScript
1const outerTrees = (trees) => {2trees.sort((x, y) => {3if (x[0] == y[0]) return x[1] - y[1];4return x[0] - y[0];5});6let lower = [],7upper = [];8for (const tree of trees) {9while (10lower.length >= 2 &&11cmp(lower[lower.length - 2], lower[lower.length - 1], tree) > 012)13lower.pop();14while (15upper.length >= 2 &&16cmp(upper[upper.length - 2], upper[upper.length - 1], tree) < 017)18upper.pop();19lower.push(tree);20upper.push(tree);21}22return [...new Set(lower.concat(upper))];23};2425const cmp = (p1, p2, p3) => {26let [x1, y1] = p1;27let [x2, y2] = p2;28let [x3, y3] = p3;29return (y3 - y2) * (x2 - x1) - (y2 - y1) * (x3 - x2);30};