📜  在两个 JSON 中搜索 diff - Javascript (1)

📅  最后修改于: 2023-12-03 15:07:57.321000             🧑  作者: Mango

在两个 JSON 中搜索 diff - Javascript

在前端开发中,有时需要比较两个 JSON 对象的区别,以找出它们之间的差异。这个过程被称为“diff”。

在 Javascript 中,有多种方法可以实现两个 JSON 对象的比较,常见的方法有以下几种:

使用 JSON.stringify()

JSON.stringify() 方法将一个 Javascript 对象转换为一个 JSON 字符串,我们可以通过比较两个 JSON 字符串来找出它们之间的差异。

const json1 = { a: 'apple', b: 'banana' };
const json2 = { a: 'apple', b: 'orange' };

const diff = (json1, json2) => {
  const diff1 = JSON.stringify(json1);
  const diff2 = JSON.stringify(json2);
  return diff1 === diff2 ? 'No difference' : 'Difference found';
};

console.log(diff(json1, json2)); // Difference found

这个方法虽然简单,但比较两个大型的 JSON 对象时,字符串的比较会变得非常耗时。因此,我们需要使用更快捷的方法来比较两个 JSON 对象。

使用第三方库

有一些优秀的第三方库可以帮助我们比较两个 JSON 对象,如 lodash 和 deep-diff。

const _ = require('lodash');
const diff = _.isEqual(json1, json2) ? 'No difference' : 'Difference found';

console.log(diff); // Difference found
const diff = require('deep-diff');
const differences = diff(json1, json2);

console.log(differences); // [ { kind: 'E', path: [ 'b' ], lhs: 'banana', rhs: 'orange' } ]
手动比较

在某些情况下,我们可能需要手动比较两个 JSON 对象。我们可以遍历 JSON 对象的每个键值对,并比较它们之间的差异。

const json1 = { a: 'apple', b: { c: 'cat' } };
const json2 = { a: 'apple', b: { c: 'dog' } };

const diff = (json1, json2) => {
  const keys1 = Object.keys(json1);
  const keys2 = Object.keys(json2);

  if (keys1.length !== keys2.length) {
    return 'Difference found';
  }

  for (let key of keys1) {
    if (json1[key] !== json2[key]) {
      return 'Difference found';
    }

    if (
      typeof json1[key] === 'object' &&
      typeof json2[key] === 'object' &&
      diff(json1[key], json2[key]) === 'Difference found'
    ) {
      return 'Difference found';
    }
  }

  return 'No difference';
};

console.log(diff(json1, json2)); // Difference Found

以上是比较两个 JSON 对象的几种方式,我们可以根据实际需求选择最合适的方法。