Comments (2)
Hello,
what objectHash function are you using?
From what I can see, the items in those array have no way to be matched (ie. how can jsondiffpatch detect which elements in the original array corresponds to which element in the final array?
if objectHash function returns different hashes for all elements on both sides, then you get all deleted, and all inserted.
In other words, to get nested diff in your array items, you need them to be matchable by objectHash. the simplest option is having an "id" field.
As a test I added "id" fields to all items on your example, try pasting these on the DEMO page to see the result:
(the objectHash function at DEMO page considers an id
field if found, but you can use anything else)
{
"a": "A",
"num": 3,
"projects": [
{
"id": 1,
"arr": [
{
"id": 1,
"h": "h",
"arr2": [
{
"id": 1,
"metadata": {
"names": true
},
"names": [
"name1",
"name2"
]
},
{
"id": 2,
"metadata": {
"names": true
},
"names": [
"name1",
"name2"
]
}
]
},
{
"id": 2,
"h": "h2",
"arr2": [
{
"id": 1,
"metadata": {
"names": true
},
"names": [
"name3",
"name4"
]
},
{
"id": 2,
"metadata": {
"names": true
},
"names": [
"name3",
"name4"
]
}
]
}
],
"obj": {
"visible": false
},
"str": "str"
}
]
}
{
"a": "B",
"num": 4,
"projects": [
{
"id": 1,
"arr": [
{
"id": 1,
"h": "h",
"arr2": [
{
"id": 1,
"metadata": {
"names": true
},
"names": [
"name1 & name 0",
"name2"
]
},
{
"id": 2,
"metadata": {
"names": true
},
"names": [
"name1 for testing",
"name2"
]
}
]
},
{
"id": 2,
"h": "h2",
"arr2": [
{
"id": 1,
"metadata": {
"names": true
},
"names": [
"name3",
"name4"
]
},
{
"id": 2,
"metadata": {
"names": true
},
"names": [
"name3",
"name4 being tested"
]
}
]
}
],
"obj": {
"visible": true
},
"str": "str2"
}
]
}
from jsondiffpatch.
Thanks for the clarification. I was assuming the objectHash function would only be used at the leaves (objects with no arrays or other objects as their members). Since I can't add IDs to my objects, I came up with a different objectHash which seems to work better for me.
jsondiffpatch.config.objectHash = function(obj) {
var hash = [],
prop;
for (prop in obj) {
if (obj.hasOwnProperty(prop)) {
hash.push(prop);
}
}
return hash.sort().join('');
};
from jsondiffpatch.
Related Issues (20)
- After configuring "objectHash", jsondiffpatch.formatters.html ShowUnchanged does not take effect
- URIError: malformed URI HOT 4
- jsonpatch formatter generate bad patches
- Create new object with changes only
- How to use old diff format for long/big Text HOT 1
- [Bug] Unpatch doesn't work as expected.
- Missing types in the latest build HOT 2
- Types for `jsonpatch` formatter HOT 2
- jsondiffpatch.diff gives undefined when comparing 2 different mongo ObjectIds
- Tracking changes in arrays based on object hashes instead of indexes
- Demo not working HOT 4
- Unable to import jsonpatch - version 0.6.0 HOT 6
- Packages on CDN are not working? HOT 1
- Unable to import this library in my project!? HOT 8
- how to find which json file the diff is coming from
- [Perf] Experiencing slow diffs on large arrays HOT 3
- html formatter error when diffing with an array with undefined values
- `Delta` type is too wide
- [question] how to using JSONFormatter when install this package via npm HOT 2
- HTML formatter without changes HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from jsondiffpatch.