jsondiffpatch icon indicating copy to clipboard operation
jsondiffpatch copied to clipboard

Array diff when deleting first item

Open Benwick91 opened this issue 3 years ago • 2 comments

Hey

I want to use the diff and patch functions for an undo function in my React-Redux project. It works fine, when I am deleting the last item, but not when I deleting the first one or an item inside.

For example I delete the first item:

{"state":[
  {"x": 1, "y": 3},
  {"x": 4, "y": 5},
  {"x": 2, "y": 6},
  {"x": 0, "y": 9}
 ]
}

{"state":[
  {"x": 4, "y": 5},
  {"x": 2, "y": 6},
  {"x": 0, "y": 9}
 ]
}

The result of diff is:

{
  "state": {
    "0": {
      "x": [
        1,
        4
      ],
      "y": [
        3,
        5
      ]
    },
    "1": {
      "x": [
        4,
        2
      ],
      "y": [
        5,
        6
      ]
    },
    "2": {
      "x": [
        2,
        0
      ],
      "y": [
        6,
        9
      ]
    },
    "_t": "a",
    "_3": [
      {
        "x": 0,
        "y": 9
      },
      0,
      0
    ]
  }
}

But I want to get:

{
  "state": {
    "0": [
      {
        "x": 1,
        "y": 3
      },
      0,
      0
    ]
  }
}

Is this possible? Thank you :)

Benwick91 avatar Sep 10 '20 12:09 Benwick91

it is mentioned in documentation that you need to use object has function

vedmalex avatar Mar 17 '21 06:03 vedmalex

As mentioned in #302 I use something like this (with lodash and hasha as dependency):

objectHash: function(obj) {
        // this function is used only to when objects are not equal by ref
        const newObj = _(obj).toPairs().sortBy(0).fromPairs().value();
        const hash = hasha(JSON.stringify(newObj), {algorithm: "sha256"})
        return hash;
    }

Maybe it fits you?

DaTebe avatar Apr 10 '21 10:04 DaTebe