记录面试题

131 阅读1分钟

/**
 * 记录6.6 徒儿的面试题
 */

// --------第一题:下段代码的输出是什么顺序 

function testAsync() {
    console.log("ok");

    setTimeout(() => {
        console.log(1);
    });

    new Promise(() => {
        console.log(2);
    }).then(() => {
        console.log(3);
    }).finally(() => {
        console.log(4);
    });

    setTimeout(() => {
        console.log(5);
    });

    console.log("ng");
}

// testAsync();

// ------第二题:实现数组去重
/**
 * 几点思考:
 * 1. 如果数组中有元素是对象呢?
 * 2. 如果数组中有元素是function呢? 
 * 3. a = {a:0}; b = {a:0}  a === b 吗?
 * 4. 如果数组中有数组呢?(数组维度)
 * 
 * @param {Array} targetArr the target array need to unique
 * @returns {Array} result array
 */
function unique(targetArr) {
    console.log("unique targetArr:", targetArr);
    let type;
    let resultArr = [];
    for (let i = 0; i < targetArr.length; i++) {
        type = typeof targetArr[i];
        switch (type) {
            case "function":
                resultArr = uniqueFun(resultArr, targetArr[i]);
                break;
            case "object": 
                for (let j = 0; j < resultArr.length; j++) {
                    if (typeof resultArr[j] === "object") {
                        equalObj(resultArr[j], targetArr[i]);
                    }
                }
                break;
            default:
                if (resultArr.indexOf(targetArr[i]) < 0) {
                    resultArr.push(targetArr[i]);
                }
                break;
        }
    }
    return resultArr;
}

function uniqueFun(resultArr, element) {
    console.log("uniqueFun");
    let isRepeat = false;
    for (let i = 0; i < resultArr.length; i++) {
        if (typeof resultArr[i] === "function") {
            if (resultArr[i].toString() === element.toString) {
                isRepeat = true;
            }
        }
    }
    if (!isRepeat) {
        resultArr.push(element);
    }
    return resultArr;
}

function equalObj(obj1, obj2) {
    console.log("uniqueObj");
    let propsArr1 = Object.getOwnPropertyNames(obj1);
    let propsArr2 = Object.getOwnPropertyNames(obj2);
    if (propsArr1.length !== propsArr2.length) {
        return false;
    }
    for (const p of obj1) {
        if (obj2.hasOwnProperty(p) !== obj1.hasOwnProperty(p)) {
            return false;            
        }
        let pType1 = typeof obj1[p];
        let pType2 = typeof obj2[p];
        if (pType1 !== pType2) {
            return false;
        }
        if (pType1 === "object") {
            equalObj(obj1[p], obj2[p]);
        }
        if (obj1[p] instanceof Array && obj2[p] instanceof Array) {
            let arr1 = obj1[p];
            let arr2 = obj2[p];
            if (arr1.length !== arr2.length) {
                return false;
            }
            
        }
    }
    return true;
}

function uniqueArr(array, array1) {
    return array.toString() === array1.toString();
}

<!--let a = Symbol("sdk");-->
<!--let arr = [equalObj, {a: 0}, [1, 2, uniqueArr], 3, a];-->
<!--let arr1 = [uniqueArr, {a: 0}, [1, 2, uniqueArr], 3, a];-->



console.log(arr instanceof Array);