3-3 查找重复数字

题目要求

实现一个方法sameNumbers,找出同时存在于两个数组的所有数字
需要处理异常传参,情况不限于:

  1. 未传入arr1或arr2

  2. arr1或arr2不是数组

  3. 字符串格式的数字需要转为数字,如:'1'需先转化为1再进行查重比较

  4. 返回结果需要过滤所有非数字项

代码实现

// 思路:给 obj 新增 key 为属性值,value 为出现的次数,最后拿出次数大于2的key
function sameNumbers(...args) {
    
    const [arr1, arr2] = args
    if(typeof arr1?.push !== 'function') {
        throw new TypeError('arguments is not a array')
    }
    if(typeof arr2?.push !== 'function') {
        throw new TypeError('arguments is not a array')
    }
    
    const newArr1 = arr1.filter(Boolean).map(Number)
    const newArr2 = arr2.filter(Boolean).map(Number);
    const obj = {}

    newArr1.concat(newArr2).forEach(key => {
        if(obj[key]) {
            ++obj[key];
        } else {
            obj[key] = 1
        }
    })
    return Object.keys(obj).filter(key => obj[key] >= 2).map(Number)
}

const res = sameNumbers(['1', '', 6, undefined], ['3', 6, 7, null]) 
console.log(res,'ok')

posted @ 2022-03-03 15:01  林见夕  阅读(177)  评论(0)    收藏  举报