javascript對象的深度比較方法


/**
 * 深度比較兩個對象是否相等
 * @method compare
 * @param oldData 需要比較的值
 * @param newData 需要比較的值
 * @return {Boolean} 判斷后的結果
 */
export const compare = function (oldData, newData) {
  if (oldData === newData) return true;
  const arg = Array.prototype.slice.call(arguments);
  const objCall = (obj, string) => Object.prototype.toString.call(obj) === `[object ${string}]`;
  if (arg.every(obj => objCall(obj, 'Object')) && Object.keys(oldData).length === Object.keys(newData).length) {
    for (const key in oldData) { if (oldData.hasOwnProperty(key) && !compare(oldData[key], newData[key])) return false; }
  } else if (arg.every(obj => objCall(obj, 'Array')) && oldData.length === newData.length) {
    for (const key in oldData) { if (!compare(oldData[key], newData[key])) return false; }
  } else {
    return false;
  }
  return true;
};

 

調用:

const obj = {};

const arr = [];

const result = compare(obj,arr);  // false;

 

對象深度比較,簡單又好吃;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM