js class类输入输出

今天面试遇到了下图的一个面试题,不知道有没有牛人用JS解答一下,感觉有思路,当时就是解不出来,回家试了试,输出的有问题

img

你题目的解答代码如下:

class RangeList {
    
    constructor() {
        this.arr = []
    }
    add(range) {
        for (var i = range[0]; i < range[1]; i++) {
            this.arr[i] = true;
        }
    }
    remove(range) {
        for (var i = range[0]; i < range[1]; i++) {
            this.arr[i] = false;
        }
    }
    print() {
        var str = "Should display:";
        var s = -1, i;
        for (i = 0; i < this.arr.length; i++) {
            if (s == -1 && this.arr[i])
                s = i;
            if (s != -1 && (!this.arr[i]))
            {
                str += " ["+s+","+i+"]";
                s = -1;
            }
        }
        if (s != -1)
            str += " ["+s+","+i+"]";

        console.log(str);
    }
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

你有什么问题需要问


    class RangList{
        constructor() {
            this.arr=[];
        }
        
        add(range){
            console.log("add [" + range[0] + "," + range[1] + "]");
            if (this.arr.length == 0){
                this.arr.push(range);
            }else{
                var new_arry = [];
                var added = false;
                for(var i=0;i<this.arr.length;i++){
                    if (range[1] < this.arr[i][0]){
                        //console.log("branch1");
                        if (!added){
                            new_arry.push(range);
                            added = true;
                        }
                        new_arry.push(this.arr[i]);
                    }else if(range[0] > this.arr[i][1]){
                        //console.log("branch2");
                        if (i == this.arr.length - 1){
                            new_arry.push(this.arr[i]);
                            if (!added){
                                new_arry.push(range);
                                added = true;
                            }
                        }else{
                            new_arry.push(this.arr[i]);
                        }
                    }else{
                        //console.log("branch3");
                        if (!added){
                            new_arry.push([Math.min(range[0],this.arr[i][0]),Math.max(range[1],this.arr[i][1])]);
                            added = true;
                        }else{
                            var index = new_arry.length - 1;
                            new_arry[index][0] = Math.min(range[0],this.arr[i][0]);
                            new_arry[index][1] = Math.max(range[1],this.arr[i][1]);
                        }
                    }
                }
                this.arr = new_arry;
            }
        }

        remove(range){
            console.log("remove [" + range[0] + "," + range[1] + "]");
            if (this.arr.length == 0){
                return;
            }else{
                var new_arry = [];
                var removed = false;
                for(var i=0;i<this.arr.length;i++){
                    if (range[0]> this.arr[i][0] && range[1] < this.arr[i][1]){
                        //console.log("r branch1");
                        new_arry.push([this.arr[i][0],range[0]]);
                        new_arry.push([range[1],this.arr[i][1]]);
                        removed = true;
                    }else if(range[0] > this.arr[i][1] || range[1] < this.arr[i][0]){
                        //console.log("r branch2");
                        new_arry.push(this.arr[i]);
                    }else if(range[0] < this.arr[i][0] && range[1] > this.arr[i][1]){
                        //console.log("r branch3");
                        removed = true;
                    }else if(range[1] > this.arr[i][0] && range[1] < this.arr[i][1]){
                        //console.log("r branch4");
                        new_arry.push([range[1],this.arr[i][1]]);
                    }else if(range[0] > this.arr[i][0] && range[0] < this.arr[i][1]){
                        //console.log("r branch5");
                        new_arry.push([this.arr[i][0],range[0]]);
                    }else{
                        //console.log("r branch6");
                        new_arry.push(this.arr[i]);
                    }
                }
                this.arr = new_arry;
            }
        }

        print(){
            var result = "";
            //console.log(this.arr);
            for(var i=0;i<this.arr.length;i++){
                result = result + "[" + this.arr[i][0] + "," + this.arr[i][1] + "]";
            }
            console.log(result);
        }
    }
    var rl = new RangList();
    rl.add([1,5]);
    rl.print();
    rl.add([10,20]);
    rl.print();
    rl.add([20,20]);
    rl.print();
    rl.add([20,21]);
    rl.print();
    rl.add([2,4]);
    rl.print();
    rl.add([3,8]);
    rl.print();
    rl.remove([10,10]);
    rl.print();
    rl.remove([10,11]);
    rl.print();
    rl.remove([15,17]);
    rl.print();
    rl.remove([3,19]);
    rl.print();

img


写的有点多了,哈哈,没事,容易理解