老师,如果要判断传入的参数是否都是对象或者是否都是数组,要怎么写呢?
来源:18-3 题目讲解-2:手写深度比较 isEqual

一里情书
2021-01-18
总觉得我这段代码里的判断有点笨,这样写有问题吗?有其他判断方式吗?
function isObject(obj){
return obj != null && typeof obj === 'object' ;
}
function isArray(obj){
return Array.isArray(obj)
}
function isEqual(obj1,obj2){
//判断传入参数是否为数组或对象
if(!isObject(obj1) || !isObject(obj2)){
return obj1 === obj2
}
//判断传入参数是否同时为数组或对象
if((!isArray(obj1) && isArray(obj2)) || (isArray(obj1) && !isArray(obj2))){
console.log(1)
return false
}
if(obj1 === obj2){
return true
}
if(Object.keys(obj1).length !== Object.keys(obj2).length){
return false
}
for(let key in obj1){
const result = isEqual(obj1[key],obj2[key])
if(!result) return false
}
return true
}
const obj1=[1,2,3]
const obj2={
0:1,
1:2,
2:3
}
console.log(isEqual(obj1,obj2)) //加上数组判断后,为false;没加上判断为true
写回答
1回答
-
双越
2021-01-19
把判断参数的代码,单独抽离出来,放在一个独立的函数中,就会好很多。
00
相似问题