Code Monkey home page Code Monkey logo

array-patch's Introduction

array-patch

build status JavaScript Style Guide

When given two arrays, this module creates patches that let you modify the first array into the second one. This is especially useful for HTTP PATCH methods (when you only want to send the changes) or just to get a overview of what changed between two given arrays.

Usage

const { createPatch, applyPatch } = require('array-patch')

var arr1 = [1, 2, 3, 4, 5]
var arr2 = [1, 3, 4, 6]

var patch = createPatch(arr1, arr2)
console.log(applyPatch(arr1, patch))
// => [1, 3, 4, 6]

Applying a produced patch always transforms the first array into the second. If you find a case where the resulting patched array is not equal to the given second array, please file an issue.

The compare function

This module works by first building a list of unchanged couples using object-hash. This works very well for most cases but imagine the following scenario:

var arr1 = ['foo', 'bar', 'baz']
var arr2 = ['foo', 'blub', 'bar1', 'baz']

Visibly it's clear that we inserted a new entry 'blub' into the second array and changed the value of the entry 'bar' to 'bar1'. But because the hashes obviously change when the value changes, the result in this case would be that we have a change from 'bar' to 'blub' and a new entry 'bar1'.

To catch those unnecessary changes you can give a compare function. This will be applied for the cases where it's not entirely clear and there are multiple possible candidates.

The arguments for the function will be the value from the initial array and the possible value from the second array. If the value changed, the function must return true, otherwise false.

This example can be implemented like the following:

var arr1 = ['foo', 'bar', 'baz']
var arr2 = ['foo', 'blub', 'bar1', 'baz']

var patch = createPatch(arr1, arr2, (val1, val2) => {
  if (val2.indexOf(val1) > -1) return true
  return false
})

console.log(patch)
// => [ { type: 'insertion', index: 0, value: 'blub' },
//  { type: 'change', index: 1, value: 'bar1' } ]

Requirements

This module runs on node >= 8 and modern browsers using Browserify or Webpack.

Tests

The tests are implemented in tests/ using tape. Run them with npm test.

Issues

If you find any issues, please file them on the Github repo. If you submit pull requests, please make sure that the tests (npm test) pass.

array-patch's People

Contributors

maxgfeller avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.