码迷,mamicode.com
首页 > 其他好文 > 详细

实现一个深度比较

时间:2019-12-02 17:18:10      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:object   bit   cas   const   switch   type   default   item   some   

function compare(a, b) {
  const typeA = {}.toString.call(a);
  const typeB = {}.toString.call(b);
  if (typeA !== typeB) return false;
  let result = false;
  switch (typeA) {
    case ‘[object Undefined]‘:
    case ‘[object Null]‘:
      result = true;
      break;
    case ‘[object String]‘:
    case ‘[object Number]‘:
      if (a === b) result = true;
      break;
    case ‘[object Array]‘:
      if (a.length === b.length) {
        result = a.every(aitem => b.some(bitem => compare(aitem, bitem)));
      }
      break;
    case ‘[object Object]‘:
      const keysA = Object.keys(a);
      const keysB = Object.keys(b);
      if (keysA.length === keysB.length) {
        result = keysA.every((key) => {
          if (b.hasOwnProperty(key)) {
            return compare(a[key], b[key]);
          }
          return false;
        });
      }
      break;
  }

  return result;
}

export default function deepCompare(a, b) {
  return compare(a, b);
}

实现一个深度比较

标签:object   bit   cas   const   switch   type   default   item   some   

原文地址:https://www.cnblogs.com/youyouluo/p/11971377.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!