javascript 中两个 JSON 的类似 git 的简单差异

所以让我们通过例子来展示它。我必须 JSON:


{

    "a": {

        "b": 1,

        "c": 2

    },

    "d": false,

    "e": 15,

    "f": "something important"

}


{

    "a": {

        "b": 1,

        "c": 22

    },

    "d": false,

    "e": "fifteen",

    "g": "something new"

}

我想要的结果是:


b: 2 => 22

e: 15 => "fifteen"

f(deleted)

g(created) "something new"

所以基本上我需要一个简单的差异来显示我从后端获得的模型中发生了什么变化,但我不确定我是否应该寻找一个库或者它是否足够简单以至于可以使用一个函数


犯罪嫌疑人X
浏览 181回答 3
3回答

收到一只叮咚

您也可以通过检查嵌套零件来检查零件并获得结果。function getDifference(a, b) {    return [...new Set([...Object.keys(a), ...Object.keys(b)])].reduce((r, k) => {        if (a[k] && b[k] && typeof a[k] === 'object' && typeof b[k] === 'object') {            var temp = getDifference(a[k], b[k]);            if (temp.length) r.push(...temp.map(([l, ...a]) => [k + ' ' + l, ...a]));            return r;        }        if (k in a && !(k in b)) {            r.push([k, 'deleted', a[k]]);            return r;        }        if (!(k in a) && k in b) {            r.push([k, 'created', b[k]]);            return r;        }        if (a[k] === b[k]) return r;        r.push([k, 'changed', a[k], b[k]]);        return r;    }, []);}console.log(getDifference(    { a: { b: 1, c: 2 }, d: false, e: 15, f: "something important" },    { a: { b: 1, c: 22 }, d: false, e: "fifteen", g: "something new" }));.as-console-wrapper { max-height: 100% !important; top: 0; }

汪汪一只猫

获得差异我认为这篇文章清楚地回答了你的问题。

繁华开满天机

也许你应该试试https://www.npmjs.com/package/deep-diff真的很容易使用,并提供了一个详细的 diff 过滤方法和 diff 工具,比如批准或不批准更改。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript