0
点赞
收藏
分享

微信扫一扫

数组对象比较处理(面试题,附答案)


闲来无事,看到一个面试题,做了一下,如图面试题

数组对象比较处理(面试题,附答案)_数据类型

 

写了几个工具函数:需要引入一下

  • 判断是否为数组
  • 判断是否为对象
  • 判断函数的参数是否为同一数据类型

/*
* 判断是否为数组
* */
function isArray (params) {
return params instanceof Array
}



/*
* 判断是否为对象
* */
function isObject (params) {
return params instanceof Object
}



/*
* 判断参数是否为同一个类型,比如是否都为对象,或者是否都为数组等等
* */
function isSameType () {
let typeArr = []
for (let i = 0; i < arguments.length; i++) {
typeArr.push(arguments[i].constructor)
}
typeArr = [...new Set(typeArr)]
return typeArr.length === 1
}

第一题答案:

export function equalObject (obj1, obj2) {
let isEqual = true
if (Object.keys(obj1).length !== Object.keys(obj2).length || !isSameType(obj1, obj2)) {
return false
}
Object.keys(obj1).forEach(val => {
if (obj1[val] !== obj2[val]) {
isEqual = false
}
})
return isEqual
}

第二题答案:

export function equalArray (arr1, arr2) {
let isEqual = true
/* 如果不是数组类型,直接返回 */
if (arr1.length !== arr2.length) return false
arr1.forEach((val, idx) => {
if (val !== arr2[idx]) isEqual = false
})
return isEqual
}

 

在上面两个题的基础上,又封装了一个判断这两种类型的函数,如下:

function equalFun (param1, parma2) {
if (param1 === parma2) {
return true
} else {
if (param1 instanceof Object) {
return equalObject(param1, parma2)
} else if (param1 instanceof Array) {
return equalArray(param1, parma2)
} else {
return false
}
}
}

第三题答案:借助于上面封装的函数,当然也需要前面两题的答案

function equalObjType (param1, parma2) {
let isEqual = true
if (isArray(param1)) {
if (param1.length !== parma2.length) return false
param1.forEach((val, idx) => {
if (!equalFun(val, parma2[idx])) {
isEqual = false
}
})
return isEqual
}

if (isObject(param1)) {
/* 此处需要判断是否为同一类型, 因为空数组和空对象也是相等的,而且不会执行下面的forEach,所以在此处做判断 */
if (Object.keys(param1).length !== Object.keys(parma2).length || !isSameType(param1, parma2)) {
return false
}
Object.keys(param1).forEach(val => {
if (!equalFun(param1[val], parma2[val])) {
isEqual = false
}
})
return isEqual
}

if (param1 !== parma2) {
return false
}
}

 

目前测试没有问题,如果有问题可以在评论区留言,如果有更好的解决上面几题答案的方法,也欢迎留言交流哦

举报

相关推荐

0 条评论