New Research: Supply Chain Attack on Axios Pulls Malicious Dependency from npm.Details →
Socket
Book a DemoSign in
Socket

align-arr

Package Overview
Dependencies
Maintainers
1
Versions
9
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

align-arr

Find the minimal edit path between two generic arrays.

latest
Source
npmnpm
Version
2.0.0
Version published
Maintainers
1
Created
Source

align-arr

Find the minimal edit path between two generic arrays.

maven

Installation

npm i align-arr

or

yarn add align-arr

Usage

Find the difference between two arrays of number.

import { align } from 'align-arr';

const source = [1, 3, 3];
const target = [1, 2, 3];

const alignment: Edit<number>[] = align(source, target);

console.log(alignment);
[
  {
    operation: 'equal',
    source: { position: 0, data: 1 },
    target: { position: 0, data: 1 },
    cost: 0
  },
  {
    operation: 'substitute',
    source: { position: 1, data: 3 },
    target: { position: 1, data: 2 },
    cost: 1
  },
  {
    operation: 'equal',
    source: { position: 2, data: 3 },
    target: { position: 2, data: 3 },
    cost: 0
  }
]

The console logs an array of Edit objects describing the difference between source and target.

export type Edit<S = any, T = S> = {
  operation: Operation;
  source: Chunk<S>;
  target: Chunk<T>;
  cost: number;
};

export type Operation = 'equal' | 'insert' | 'delete' | 'substitute';

export type Chunk<T = any> = {
  position: number;
  data?: T;
};

Customizing The Aligner

By default, the algorithm compares two elements as a === b, and has a fixed cost of 1 for each operation.

In this example, we override the equals method to compare between a number and a string, and assign a fixed cost of 10 to the substitute operation, which causes the algorithm to favour insert and delete instead.

const source = [1, 3, 3];
const target = ['1', '2', '3'];

const alignment = align(source, target, {
  equals: (a, b) => a === Number.parseFloat(b),
  insCost: (a) => 1,
  delCost: (a) => 1,
  subCost: (a, b) => 10,
});

console.log(alignment);
[
  {
    operation: 'equal',
    source: { position: 0, data: 1 },
    target: { position: 0, data: '1' },
    cost: 0
  },
  {
    operation: 'insert',
    source: { position: 1, data: undefined },
    target: { position: 1, data: '2' },
    cost: 1
  },
  {
    operation: 'delete',
    source: { position: 1, data: 3 },
    target: { position: 2, data: undefined },
    cost: 1
  },
  {
    operation: 'equal',
    source: { position: 2, data: 3 },
    target: { position: 2, data: '3' },
    cost: 0
  }
]

Contributions

To contribute to align-arr, follow these steps:

  • Fork this repository.
  • Create a branch: git checkout -b <branch_name>.
  • Make your changes and commit them: git commit -m '<commit_message>'
  • Push to the original branch: git push origin <project_name>/<location>
  • Create the pull request.

Alternatively see the GitHub documentation on creating a pull request.

Contributors

Thanks to the following people who have contributed to this project:

Contact

If you want to contact me you can reach me at guy.manzurola@gmail.com.

License

This project uses the following license: MIT.

Keywords

alignment

FAQs

Package last updated on 24 Jul 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts