美文网首页
js的Object对象深度对比 和 数组自定义去重(若有问题,欢

js的Object对象深度对比 和 数组自定义去重(若有问题,欢

作者: 7b7d23d16ab5 | 来源:发表于2020-08-06 10:43 被阅读0次

/**
 * json 格式对象的深度对比(供 comparisonObject 调用)
 * @param sourceJson
 * @param compareJson
 * @returns {boolean}
 */
const comparisonJson = (sourceJson, compareJson) => {
  const sourceKeys = Object.keys(sourceJson)
  const compareKeys = Object.keys(compareJson)
  if(sourceKeys.length !== compareKeys.length){
    return false
  }else{
    for(const jsonKey of sourceKeys){
      const sourceType = typeof sourceJson[jsonKey]
      const compareType = typeof compareJson[jsonKey]
      if(sourceType !== compareType){
        return false
      }else if(sourceType === 'object'){
        return comparisonObject(sourceJson,compareJson)
      }else if(sourceJson[jsonKey] !== compareJson[jsonKey]){
        return false
      }
    }
    return true
  }
}

/**
 * 对象的深度对比
 * @param sourceObj
 * @param compareObj
 * @returns {boolean} true=相同,false=不相同
 */
const comparisonObject = (sourceObj, compareObj) => {
  const sourceObjType = typeof sourceObj
  const compareObjType = typeof compareObj
  if (sourceObjType !== compareObjType) {
    return false
  } else if (sourceObjType === 'object') {
    if (JSON.stringify(sourceObj) === JSON.stringify(compareObj)) {
      return true
    } else if (sourceObj instanceof Array) {
      for (const sourceItem of sourceObj) {
        for (const compareItem of compareObj) {
          if (!comparisonJson(sourceItem, compareItem)) {
            return false
          }
        }
      }
      return true
    } else {
      return comparisonJson(sourceObj, compareObj)
    }
  }

  return sourceObj === compareObj
}

/**
 * 数组自定义属性去重
 * @param arr
 * @param prop
 */
const arrayUnique = (arr, prop) => {
  return arr.filter((element,index,self)=>{
    return self.findIndex(el=>el[prop]===element[prop])===index
  })
}

export {comparisonObject,arrayUnique}

相关文章

网友评论

      本文标题:js的Object对象深度对比 和 数组自定义去重(若有问题,欢

      本文链接:https://www.haomeiwen.com/subject/ctlzrktx.html