Skip to content

WebReflection/majinbuu

Repository files navigation

Majin Buu

License: ISC Build Status Coverage Status donate

Apply the Levenshtein distance to transform / morph an Array into another, performing the least amount of needed .splice(...) operations.

const abra = ['a', 'b', 'r', 'a'];
majinbuu(abra, ['c', 'a', 'd', 'a', 'b', 'r', 'a']);

abra; // now ['c', 'a', 'd', 'a', 'b', 'r', 'a']

It is also possible to intercept all splice calls using an aura, which augments the splice method of the list, delegating the interceptor one.

const abra = ['a', 'b', 'r', 'a'];
const interceptor = {
  splice(index, removal, ...items) {
    console.log(index, removal, ...items);
    abra.splice.apply(abra, arguments);
  }
};
const aura = majinbuu.aura(interceptor, abra);

majinbuu(aura, ['c', 'a', 'd', 'a', 'b', 'r', 'a']);
// 0 0 "c"
// 2 0 "d" "a"

The optional third argument avoid processing grids that are too big (comparing lists with too many items).

const noMoreThan1K = 1000;
majinbuu(list1, list2, noMoreThan1K);

If the square of the list1 and list2 product is higher than noMoreThan1K, the splice operation will remove all list1 items and push all list2.

Compatibility

Every. JavaScript. Engine.

About

Morph an array into another via Levenshtein distance

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors