Fix #917, #926: update ordering of object keys

This commit is contained in:
jos 2020-03-18 10:44:25 +01:00
parent 3363c2df8a
commit b09dbca3fd
2 changed files with 9 additions and 24 deletions

View File

@ -4,7 +4,7 @@ https://github.com/josdejong/jsoneditor
## not yet published, version 8.6.2 ## not yet published, version 8.6.2
- Fixed #926: Keep order of properties when updating an object. - Fixed #917, #926: Keep order of properties when updating an object.
- Fixed #928: Custom root name not reflected in path of navigation bar. - Fixed #928: Custom root name not reflected in path of navigation bar.
- Upgraded to `ajv@6.12.0` - Upgraded to `ajv@6.12.0`

View File

@ -1490,31 +1490,16 @@ export class Node {
return false return false
} }
// TODO: for better efficiency, we could create a property `isDuplicate` on all of the childs // we reckon with the order of the properties too.
// and keep that up to date. This should make deepEqual about 20% faster. const props = Object.keys(json)
const props = {} if (this.childs.length !== props.length) {
let propCount = 0
for (i = 0; i < this.childs.length; i++) {
const child = this.childs[i]
if (!props[child.field]) {
// We can have childs with duplicate field names.
// We take the first, and ignore the others.
props[child.field] = true
propCount++
if (!(child.field in json)) {
return false
}
if (!child.deepEqual(json[child.field])) {
return false
}
}
}
if (propCount !== Object.keys(json).length) {
return false return false
} }
for (i = 0; i < props.length; i++) {
if (this.childs[i].field !== props[i]) {
return false
}
}
} else { } else {
if (this.value !== json) { if (this.value !== json) {
return false return false