SOURCE

class Queue {
    constructor() {
        this.items = {}
        this.count = 0;
        this.firstCount = 0
    }

    push(el) {
        this.items[this.count] = el;
        this.count++;
    }

    del() {
        if (this.isEmpty()) {
            return undefined
        }
        const result = this.items[this.firstCount];
        delete this.items[this.firstCount];
        this.firstCount++;
        return result;
    }

    isEmpty() {
        return this.count - this.firstCount === 0
    }

    peek() {
        if (this.isEmpty()) {
            return undefined
        }
        return this.items[this.firstCount]
    }

    size() {
        return this.count - this.firstCount
    }

    clear() {
        this.items = {}
        this.count = 0;
        this.firstCount = 0
    }

    toString() {
        if (this.isEmpty()) {
            return '';
        }
        let str = `${this.items[this.firstCount]}`;
        for (let i = this.firstCount + 1; i < this.count; i++) {
            str = `${str},${this.items[i]}`
        }
        return str;
    }
}

function getWinner(list, num) {
    const queue = new Queue();
    const result = []
    for (let i = 0; i < list.length; i++) {
        queue.push(list[i])
    }
    while (queue.size() > 1) {
        for (let i = 0; i < num; i++) {
            queue.push(queue.del())
        }
        result.push(queue.del())
    }
    return {
        result,
        winner: queue.del()
    }
}

const names = ['John', 'Jack', 'Nancy', 'Nana', 'Sasha', 'Rose', 'Yumy', 'Jerry']
const result = getWinner(names, 3);
console.log(result.winner)
console 命令行工具 X clear

                    
>
console