Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Oct 17, 2021. It is now read-only.

awcjack/deep-object-diff-array

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

105 Commits

Repository files navigation

Deprecated

Mirgated to gitlab for cicd

deep-object-diff

❄️

Deep diff two JavaScript Objects


Build Status Code Coverage version downloads MIT License PRs Welcome

A small library that can deep diff two JavaScript Objects, including nested structures of arrays and objects.

Installation

yarn add awcjack/deep-object-diff#real-fix

Functions available:

Importing

ES6 / Babel:

import { diff, addedDiff, deletedDiff, updatedDiff, detailedDiff } from 'deep-object-diff';

ES5:

const { diff, addedDiff, deletedDiff, detailedDiff, updatedDiff } = require("deep-object-diff");
// OR
const diff = require("deep-object-diff").diff;
const addedDiff = require("deep-object-diff").addedDiff;
const deletedDiff = require("deep-object-diff").deletedDiff;
const detailedDiff = require("deep-object-diff").detailedDiff;
const updatedDiff = require("deep-object-diff").updatedDiff;

Usage:

diff:

const lhs = {
 foo: {
 bar: {
 a: ['a', 'b'],
 b: 2,
 c: ['x', 'y'],
 e: 100 // deleted
 }
 },
 buzz: 'world'
};
const rhs = {
 foo: {
 bar: {
 a: ['a'], // index 1 ('b') deleted
 b: 2, // unchanged
 c: ['x', 'y', 'z'], // 'z' added
 d: 'Hello, world!' // added
 }
 },
 buzz: 'fizz' // updated
};
console.log(diff(lhs, rhs)); // =>
/*
{
 foo: {
 bar: {
 a: {
 '1': undefined
 },
 c: {
 '2': 'z'
 },
 d: 'Hello, world!',
 e: undefined
 }
 },
 buzz: 'fizz'
}
*/

addedDiff:

const lhs = {
 foo: {
 bar: {
 a: ['a', 'b'],
 b: 2,
 c: ['x', 'y'],
 e: 100 // deleted
 }
 },
 buzz: 'world'
};
const rhs = {
 foo: {
 bar: {
 a: ['a'], // index 1 ('b') deleted
 b: 2, // unchanged
 c: ['x', 'y', 'z'], // 'z' added
 d: 'Hello, world!' // added
 }
 },
 buzz: 'fizz' // updated
};
console.log(addedDiff(lhs, rhs));
/*
{
 foo: {
 bar: {
 c: {
 '2': {
 after: 'z'
 }
 },
 d: {
 after: 'Hello, world!'
 }
 }
 }
}
*/

deletedDiff:

const lhs = {
 foo: {
 bar: {
 a: ['a', 'b'],
 b: 2,
 c: ['x', 'y'],
 e: 100 // deleted
 }
 },
 buzz: 'world'
};
const rhs = {
 foo: {
 bar: {
 a: ['a'], // index 1 ('b') deleted
 b: 2, // unchanged
 c: ['x', 'y', 'z'], // 'z' added
 d: 'Hello, world!' // added
 }
 },
 buzz: 'fizz' // updated
};
console.log(deletedDiff(lhs, rhs));
/*
{
 foo: {
 bar: {
 a: {
 '1': {
 before: 'b'
 }
 },
 e: {
 before: 'Hello, world!'
 }
 }
 }
}
*/

updatedDiff:

const lhs = {
 foo: {
 bar: {
 a: ['a', 'b'],
 b: 2,
 c: ['x', 'y'],
 e: 100 // deleted
 }
 },
 buzz: 'world'
};
const rhs = {
 foo: {
 bar: {
 a: ['a'], // index 1 ('b') deleted
 b: 2, // unchanged
 c: ['x', 'y', 'z'], // 'z' added
 d: 'Hello, world!' // added
 }
 },
 buzz: 'fizz' // updated
};
console.log(updatedDiff(lhs, rhs));
/*
{
 buzz: {
 before: 'world'
 after: 'fizz'
 }
}
*/

detailedDiff:

const lhs = {
 foo: {
 bar: {
 a: ['a', 'b'],
 b: 2,
 c: ['x', 'y'],
 e: 100 // deleted
 }
 },
 buzz: 'world'
};
const rhs = {
 foo: {
 bar: {
 a: ['a'], // index 1 ('b') deleted
 b: 2, // unchanged
 c: ['x', 'y', 'z'], // 'z' added
 d: 'Hello, world!' // added
 }
 },
 buzz: 'fizz' // updated
};
console.log(detailedDiff(lhs, rhs));
/*
{
 added: {
 foo: {
 bar: {
 c: {
 '2': {
 after: 'z'
 }
 },
 d: {
 after: 'Hello, world!'
 }
 }
 }
 },
 deleted: {
 foo: {
 bar: {
 a: {
 '1': {
 before: 'b'
 }
 },
 e: {
 before: 100
 }
 }
 }
 },
 updated: {
 buzz: {
 before: 'world'
 after: 'fizz'
 }
 }
}
*/

License

MIT

Packages

No packages published

Languages

  • JavaScript 100.0%

AltStyle によって変換されたページ (->オリジナル) /