前端 JavaScript算法+面试

122 阅读2分钟

第一题:求出两个数组(集合)相同的数。 `

/** 数组: filter配合includes*/
function intersetion(arr1, arr2) {
    return arr2.filter(item => arr1.includes(item))
}

/** 集合:*/
function intersetion(set1, set2) {
    let setTemp = new Set()
    for (let item of set2) {
        if (set1.has(item)) {setTemp.add(item)}
    }

    // 如果你需要放在一个数组的话,可以加下面一行代码
    return Array.from(setTemp);
}


`

第二题:找出数组中非零最小值的Index `

/** 如果你需要考虑算法复杂度的话,试试这方法
*   当然此思路,同样可以替换其他语言C,Java */
        function getMinIdx(arr) {
            let minNum = Number.MAX_VALUE;   // 非零最小数, 先初始化js最大数,方便后面索引判断
            let minNumIdx = -1; // 非零最小数Index
            if (!arr.length) {
                return minNumIdx; //空数组的直接返回初始值为负数的Index
            }

            for(let i = 0; i < arr.length; i++) {
                if (arr[i] > 0) {   // 剔除所有小于零的数
                    if (arr[i] < minNum) {  // 不断找出小于minNum的数
                        minNum = arr[i];
                        minNumIdx = i;
                    }
                }
            }

            return minNumIdx;   // 返回最小数Index
        }


 /** 如果你想应用一些JS的函数话,下面方法也不错 */
    function getMinIdx(arr) {
        if(!arr.length) return -1;    // 同上理
        // 先用filter过滤小于0的数,然后配合Math.min函数找出最小数
        const minNum = Math.min(...arr.filter(item => item > 0))
        // 再用findIndex函数,对原数组进行索引找出最小值的index
        // 值得注意的是:findIndex只会找出最小值的第一次出现的位置,
        // 如果数组重复出现最小值,你想找出所有出现最小值的位置,我们得另想它法
        return arr.findIndex(el => el === minNum)
    }

`

第三题:用多种方法区分一个变量是否为Object还是Array(参考了其他雷同问题的答案)

注意:这里请不要杠Array是一种特殊的对象,在以后题目我们再来探讨这个问题 `

第一种:从原型调toString
// 可以在Object的原型调toString方法,然后call绑定这个变量看是否返回[object Object]
// 还是返回[object Array]
function isArrOrObj(arr) {
    console.log(Object.prototype.toString.call(arr))
}

第二种:isArray
// 顾名思义,用Array.isArray来判断是最容易想到的,返回的是一个Boolean类型
// 当然我们只是探讨数组or对象,对其他不必过于追究
funtion _isArray(arr) {
    if(Array.isArray(arr) return true;
    return false;
}

第三种:instanceof
// instanceof在MDN解释很准确:
// instanceof 运算符用来检测 constructor.prototype 是否存在于参数 object 的原型链上。
function isArrOrObj(arr) {
    if (arr instanceof Array)
        console.log("Array")
    else if (arr instanceof Object)
        console.log("Object");
    else // 其他也是同理不举例
        console.log("Others")
}

第四-五种:
4constructor: 思路:(arr constructor Array)
                      (obj constructor Object)
5: for... in    思路:通过循环遍历这个数的原型方法,在配合用hasOwnProperty来判断

`

第四题:手写Array.prototype.split() //明天更新