array-areas
TypeScript icon, indicating that this package has built-in type declarations

1.0.1 • Public • Published

array-areas

Select elements in 2D arrays in interesting ways.

Installation

npm install --save array-areas

Usage

import { diagonal, antidiagonal, area, row, col } from 'array-areas'

diagonal

You can select a diagonal selection of element from your array by calling diagonal(arr, rowIndex, columnIndex).

If our array looked like this

┌─────┬─────┬─────┬─────┬─────┐
│  a  │  b  │  c  │  d  │  e  │
├─────┼─────┼─────┼─────┼─────┤
│  f  │  g  │  h  │  i  │  j  │
├─────┼─────┼─────┼─────┼─────┤
│  k  │  l  │  m  │  n  │  o  │
├─────┼─────┼─────┼─────┼─────┤
│  p  │  q  │  r  │  s  │  t  │
├─────┼─────┼─────┼─────┼─────┤
│  u  │  v  │  w  │  x  │  y  │
└─────┴─────┴─────┴─────┴─────┘

And we called diagonal(arr, 2, 1) our result would be a flat array containing

[
  {row: 1, col: 0, val: 'f' },
  {row: 2, col: 1, val: 'l' },
  {row: 3, col: 2, val: 'r' },
  {row: 4, col: 3, val: 'x' },
]

Illustrated here:

┌─────┬─────┬─────┬─────┬─────┐
│     │     │     │     │     │
├─────┼─────┼─────┼─────┼─────┤
│ 1,0 │     │     │     │     │
├─────┼─────┼─────┼─────┼─────┤
│     │ 2,1 │     │     │     │
├─────┼─────┼─────┼─────┼─────┤
│     │     │ 3,2 │     │     │
├─────┼─────┼─────┼─────┼─────┤
│     │     │     │ 4,3 │     │
└─────┴─────┴─────┴─────┴─────┘

antidiagonal

You can select a anti-diagonal selection of elements from your array by calling antidiagonal(arr, rowIndex, columnIndex).

If our array looked like this

┌─────┬─────┬─────┬─────┬─────┐
│  a  │  b  │  c  │  d  │  e  │
├─────┼─────┼─────┼─────┼─────┤
│  f  │  g  │  h  │  i  │  j  │
├─────┼─────┼─────┼─────┼─────┤
│  k  │  l  │  m  │  n  │  o  │
├─────┼─────┼─────┼─────┼─────┤
│  p  │  q  │  r  │  s  │  t  │
├─────┼─────┼─────┼─────┼─────┤
│  u  │  v  │  w  │  x  │  y  │
└─────┴─────┴─────┴─────┴─────┘

And we called antidiagonal(arr, 1, 2) our result would be a flat array containing

[
  {row: 0, col: 3, val: 'd' },
  {row: 1, col: 2, val: 'g' },
  {row: 2, col: 1, val: 'l' },
  {row: 3, col: 0, val: 'u' },
]

Illustrated here:

┌─────┬─────┬─────┬─────┬─────┐
│     │     │     │ 0,3 │     │
├─────┼─────┼─────┼─────┼─────┤
│     │     │ 1,2 │     │     │
├─────┼─────┼─────┼─────┼─────┤
│     │ 2,1 │     │     │     │
├─────┼─────┼─────┼─────┼─────┤
│ 3,0 │     │     │     │     │
├─────┼─────┼─────┼─────┼─────┤
│     │     │     │     │     │
└─────┴─────┴─────┴─────┴─────┘

area

An area is a group of elements defined by any two elements and composed of all the elements between them. This can be generated by calling arr(arr, [rowIndex, columnIndex], [rowIndex, columnIndex]).

If our array looked like this

┌─────┬─────┬─────┬─────┬─────┐
│  a  │  b  │  c  │  d  │  e  │
├─────┼─────┼─────┼─────┼─────┤
│  f  │  g  │  h  │  i  │  j  │
├─────┼─────┼─────┼─────┼─────┤
│  k  │  l  │  m  │  n  │  o  │
├─────┼─────┼─────┼─────┼─────┤
│  p  │  q  │  r  │  s  │  t  │
├─────┼─────┼─────┼─────┼─────┤
│  u  │  v  │  w  │  x  │  y  │
└─────┴─────┴─────┴─────┴─────┘

Getting an area made of element[2][1] ("l") and element[3][3] ("s") would look like this area(arr, [2,1], [3,3]) and our result would be a 2d array with the area elements.

[
  [
    { row: 2, col: 1, val: 'l' },
    { row: 2, col: 2, val: 'm' },
    { row: 2, col: 3, val: 'n' }
  ],
  [
    { row: 3, col: 1, val: 'q' },
    { row: 3, col: 2, val: 'r' },
    { row: 3, col: 3, val: 's' }
  ]
]

Illustrated here:

┌─────┬─────┬─────┬─────┬─────┐
│  a  │  b  │  c  │  d  │  e  │
├─────┼─────┼─────┼─────┼─────┤
│  f  │  g  │  h  │  i  │  j  │
├─────┼─────┴─────┴─────┼─────┤
│  k  │                 │  o  │
├─────┤      area       ├─────┤
│  p  │                 │  t  │
├─────┼─────┬─────┬─────┼─────┤
│  u  │  v  │  w  │  x  │  y  │
└─────┴─────┴─────┴─────┴─────┘

col

You can select a column of elements from your array by calling col(arr, columnIndex).

If our array looked like this

┌─────┬─────┬─────┬─────┬─────┐
│  a  │  b  │  c  │  d  │  e  │
├─────┼─────┼─────┼─────┼─────┤
│  f  │  g  │  h  │  i  │  j  │
├─────┼─────┼─────┼─────┼─────┤
│  k  │  l  │  m  │  n  │  o  │
├─────┼─────┼─────┼─────┼─────┤
│  p  │  q  │  r  │  s  │  t  │
├─────┼─────┼─────┼─────┼─────┤
│  u  │  v  │  w  │  x  │  y  │
└─────┴─────┴─────┴─────┴─────┘

And we called col(arr, 1) our result would be a flat array containing

[
  { row: 0, col: 1, val: 'b' },
  { row: 1, col: 1, val: 'g' },
  { row: 2, col: 1, val: 'l' },
  { row: 3, col: 1, val: 'q' },
  { row: 4, col: 1, val: 'v' }
]

Illustrated here:

┌─────┬─────┬─────┬─────┬─────┐
│     │ 0,1 │     │     │     │
├─────┼─────┼─────┼─────┼─────┤
│     │ 1,1 │     │     │     │
├─────┼─────┼─────┼─────┼─────┤
│     │ 2,1 │     │     │     │
├─────┼─────┼─────┼─────┼─────┤
│     │ 3,1 │     │     │     │
├─────┼─────┼─────┼─────┼─────┤
│     │ 4,1 │     │     │     │
└─────┴─────┴─────┴─────┴─────┘

row

You can select a row of elements from your array by calling row(arr, rowIndex).

If our array looked like this

┌─────┬─────┬─────┬─────┬─────┐
│  a  │  b  │  c  │  d  │  e  │
├─────┼─────┼─────┼─────┼─────┤
│  f  │  g  │  h  │  i  │  j  │
├─────┼─────┼─────┼─────┼─────┤
│  k  │  l  │  m  │  n  │  o  │
├─────┼─────┼─────┼─────┼─────┤
│  p  │  q  │  r  │  s  │  t  │
├─────┼─────┼─────┼─────┼─────┤
│  u  │  v  │  w  │  x  │  y  │
└─────┴─────┴─────┴─────┴─────┘

And we called row(arr, 1) our result would be a flat array containing

[
  { row: 1, col: 0, val: 'f' },
  { row: 1, col: 1, val: 'g' },
  { row: 1, col: 2, val: 'h' },
  { row: 1, col: 3, val: 'i' },
  { row: 1, col: 4, val: 'j' }
]

Illustrated here:

┌─────┬─────┬─────┬─────┬─────┐
│     │     │     │     │     │
├─────┼─────┼─────┼─────┼─────┤
│ 1,0 │ 1,1 │ 1,2 │ 1,3 │ 1,4 │
├─────┼─────┼─────┼─────┼─────┤
│     │     │     │     │     │
├─────┼─────┼─────┼─────┼─────┤
│     │     │     │     │     │
├─────┼─────┼─────┼─────┼─────┤
│     │     │     │     │     │
└─────┴─────┴─────┴─────┴─────┘

Readme

Keywords

none

Package Sidebar

Install

npm i array-areas

Weekly Downloads

1

Version

1.0.1

License

MIT

Unpacked Size

14.5 kB

Total Files

5

Last publish

Collaborators

  • joemaddalone