包含 JSON 和 Node.js 的差异数组

Diff arrays containing JSON with Node.js

我有两个数组 oldnew,这种结构存储为 .json 文件:

[
    {
        "hardware": {
            "screen": "big",
            "name": "iPhone 6 Plus"
            "colors available": ["spacegrey", "gold"]
        },
        "software": {
            "OS": "iOS",
            apps: ["Apple Music", "Contact"]
        }
    },
    {
        // hardware and software JSON arrays again, more than 30000 phones in the file
    }
]

我想区分这两个 .json 文件,我尝试了很多包 (archiver, jsdiff, jsondiffpatch) 但我没有找到能够给我 [=24= 列表的东西]s 删除或添加。我不在乎一个phone是否被修改了,它应该被认为是删除了一个phone并添加了另一个phone。

有做这种diff的包还是我自己写算法?

我不认为有一个包可以专门完成您想要实现的目标。试试这个:

// Returns a list of phones added or removed
function phonesAddedOrRemoved(listA, listB) {
    return [].concat(phonesAdded(listA, listB), phonesRemoved(listA, listB));
}
// Returns of a list of phones removed
function phonesRemoved(listA, listB) {
    return phonesDiff(listA, listB);
}
// Returns a list of phones added
function phonesAdded(listA, listB) {
    return phonesDiff(listB, listA);
}

// Returns phones in listA but not in listB
function phonesDiff(listA, listB) {
    return listA.filter(function (phone) {
        return listB.filter(function (_phone) {
            return phone.hardware.name === _phone.hardware.name;
        }).length === 0;
    });
}

举个例子:https://jsfiddle.net/8uz6fy8q/

以防万一 objectDiff.js 也很好用。 这是两个对象

上的实时 demo 映射差异