包含 JSON 和 Node.js 的差异数组
Diff arrays containing JSON with Node.js
我有两个数组 old
和 new
,这种结构存储为 .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;
});
}
以防万一 objectDiff.js 也很好用。
这是两个对象
上的实时 demo 映射差异
我有两个数组 old
和 new
,这种结构存储为 .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;
});
}
以防万一 objectDiff.js 也很好用。 这是两个对象
上的实时 demo 映射差异