3-3 查找重复数字
题目要求
实现一个方法sameNumbers,找出同时存在于两个数组的所有数字
需要处理异常传参,情况不限于:
-
未传入arr1或arr2
-
arr1或arr2不是数组
-
字符串格式的数字需要转为数字,如:'1'需先转化为1再进行查重比较
-
返回结果需要过滤所有非数字项
代码实现
// 思路:给 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')

浙公网安备 33010602011771号