对象和数组没区分出来
来源:22-3 题目讲解-2:手写深度比较isEqual
小友友
2020-03-19
let obj1 = {
a: [‘x’,‘y’]
}
let obj2 = {
a: {‘0’:‘x’,‘1’:‘y’}
}
老师,您这个代码没区分对象和数组,这个例子输出是true,但实际结果并不是
写回答
2回答
-
小友友
提问者
2020-03-19
function isObject(obj) { return Object.prototype.toString.call(obj) === '[object Object]' } function isArray(arr) { return Object.prototype.toString.call(arr) === '[Object Array]' } function isEqual(obj1, obj2) { // 值类型 if (obj1 === obj2) { return true } // 类型为对象并且元素个数相同 if (isObject(obj1) && isObject(obj2) && Object.keys(obj1).length === Object.keys(obj2).length) { for (let key in obj1) { if (obj1.hasOwnProperty(key)) { // 递归 const res = isEqual(obj1[key], obj2[key]) if (!res) { return false } } } // 类型为数组并且数组长度相同 } else if(isArray(obj1) && isArray(obj2) && obj1.length === obj2.length) { for (let key in obj1) { // 递归 const res = isEqual(obj1[key], obj2[key]) if (!res) { return false } } } else { return false } return true }10 -
双越
2020-03-19
提的真问题非常好。
确实以目前的方式没分出来,可以在比较的时候,先判断一下类型。
00
相似问题