
Research
Two Malicious Rust Crates Impersonate Popular Logger to Steal Wallet Keys
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
@nkp/array-map
Advanced tools
ArrayMap holds key-array with arrays of the given value types.
npm install @nkp/array-map
yarn add @nkp/array-map
@nkp/array-map
targets CommonJS and ES modules. To utilise ES modules consider using a bundler like webpack
or rollup
.
Returns a unique array clone of the given array.
// interface
function static uniq<T>(array: T[]): T[];
// usage
import { ArrayMap } from '@nkp/array-map';
// [1, 2, 3]
ArrayMap.uniq([1, 1, 2, 3]);
Get an iterator for the array's entries.
Uses Array.prototype.entries
if it exists.
Otherwise uses ArrayMap.getArrayEntriesPolyfill
.
// interface
function getArrayEntries<T>(array: T[]): IterableIterator<[number, T]>;
// usage
import { ArrayMap } from '@nkp/array-map';
// [[1, 'a'], [2, 'b'], [3, 'c']]
ArrayMap.getArrayEntries(['a', 'b', 'c']);
Polyfill for Array.prototype.entries
in-case Array.prototype.entries
does not exist.
// interface
function getArrayEntriesPolyfill<T>(array: T[]): IterableIterator<[number, T]>;
// usage
import { ArrayMap } from '@nkp/array-map';
// [[1, 'a'], [2, 'b'], [3, 'c']]
ArrayMap.getArrayEntriesPolyfill(['a', 'b', 'c']);
Get an iterator for the map's entries.
Uses Map.prototype.entries
if it exists.
Otherwise uses ArrayMap.getMapEntriesPolyfill
.
// interface
function getMapEntries<K, V>(map: Map<K, V>): IterableIterator<[K, V]>;
// usage
import { ArrayMap } from '@nkp/array-map';
// [[1, 'a'], [2, 'b'], [3, 'c']]
ArrayMap.getMapEntries(['a', 'b', 'c']);
Polyfill for Map.prototype.entries
in-case Map.prototype.entries
does not exist.
// interface
function getMapEntriesPolyfill<T>(array: T[]): IterableIterator<[number, T]>;
// usage
import { ArrayMap } from '@nkp/array-map';
// [[1, 'a'], [2, 'b'], [3, 'c']]
ArrayMap.getMapEntriesPolyfill(['a', 'b', 'c']);
Calculate the real index for a possibly negative index value.
// interface
function calculateIndex(length: number, index: number): number;
// example
import { ArrayMap } from '@nkp/array-map';
const array = [0, 1, 2];
// positive indexing
array[ArrayMap.calculateIndex(array.length, 0)] // 0
array[ArrayMap.calculateIndex(array.length, 1)] // 1
array[ArrayMap.calculateIndex(array.length, 2)] // 2
// negative indexing
array[ArrayMap.calculateIndex(array.length, -1)] // 2
array[ArrayMap.calculateIndex(array.length, -2)] // 1
array[ArrayMap.calculateIndex(array.length, -3)] // 0
Get the element at the array's index.
Supports negative indexing.
// interface
function at<T>(array: T[], index: number): undefined | T;
// example
import { ArrayMap } from '@nkp/array-map';
const array = [0, 1, 2];
// positive indexing
ArrayMap.at(array, 0); // 0
ArrayMap.at(array, 1); // 1
ArrayMap.at(array, 2); // 2
// negative indexing
ArrayMap.at(array, -1); // 2
ArrayMap.at(array, -2); // 1
ArrayMap.at(array, -3); // 0
Clone an array of arrays whose first element is a key and second element is an array of values.
Clones the outer and inner arrays. Does not clone the inner array's elements.
// interface
function cloneEntries<K, V>(ref: [K, V[]][]): [K, V[]][];
// example
import { ArrayMap } from '@nkp/array-map';
// [['a', [1, 2, 3]], ['b', [2, 3]], ['c', [3]]]
const entries: [string, number[]][] = [
['a', [1, 2, 3],],
['b', [2, 3],],
['c', [3],],
];
// [['a', [1, 2, 3]], ['b', [2, 3]], ['c', [3]]]
const cloned = ArrayMap.cloneEntries(entries);
entries !== cloned // true
entries[0] !== cloned[0] // true
entries[1] !== cloned[1] // true
entries[2] !== cloned[2] // true
Clone a map of arrays whose first element is a key and second element is an array of values.
Clones the outer and inner arrays. Does not clone the inner array's elements.
// interface
function cloneMap<K, V>(ref: Map<K, V[]>): Map<K, V[]>;
// example
import { ArrayMap } from '@nkp/array-map';
// Map([['a' => [1, 2, 3]], ['b' => [2, 3]], ['c' => [3]]])
const entries: Map<string, number[]> = new Map([
['a', [1, 2, 3],],
['b', [2, 3],],
['c', [3],],
]);
// Map([['a' => [1, 2, 3]], ['b' => [2, 3]], ['c' => [3]]])
const cloned = ArrayMap.cloneMap(entries);
entries !== cloned // true
entries.get('a') !== cloned.get('a') // true
entries.get('b') !== cloned.get('b') // true
entries.get('c') !== cloned.get('c') // true
Create a new ArrayMap by grouping an array of values by a key or calculated value.
// interface
function groupBy<K extends keyof V, V>(array: V[], by: K): ArrayMap<V[K], V>;
function groupBy<K, V>(array: V[], by: (value: V) => K): ArrayMap<K, V>;
// example
import { ArrayMap } from '@nkp/array-map';
const objects = [
{ score: 1, name: 'Nick', },
{ score: 1, name: 'John', },
{ score: 2, name: 'James', },
{ score: 3, name: 'Oliver', },
{ score: 3, name: 'Rudolph', },
{ score: 4, name: 'Steve', },
{ score: 6, name: 'Irene', },
{ score: 6, name: 'Lisa', },
{ score: 7, name: 'Brian', },
{ score: 8, name: 'Furball', },
]
// ArrayMap([
// 1 => ['Nick', 'John'],
// 2 => ['James'],
// 3 => ['Oliver', Rudolph'],
// 4 => ['Steve'],
// 6 => ['Irene', 'Lisa'],
// 7 => ['Brian'],
// 8 => ['Furball'],
// ])
const group = ArrayMap.groupBy(objects, 'score');
// ArrayMap([
// 0 => ['Nick', 'John'],
// 2 => ['James', 'Oliver', 'Rudolph'],
// 4 => ['Steve'],
// 6 => ['Irene', 'Lisa', 'Brian'],
// 8 => ['Furball'],
// ])
const buckets = ArrayMap.groupBy(objects, (score) => score - (score % 2));
Create a new ArrayMap from a Map of arrays.
Clones the map and its array values.
// interface
function fromMap<K, V>(map: Map<K, V[]>): ArrayMap<K, V>;
// example
import { ArrayMap } from '@nkp/array-map';
const map = Map<number, string[]>([
[0, ['Nick', 'John'],],
[2, ['James', 'Oliver', 'Rudolph'],],
[4, ['Steve'],],
[6, ['Irene', 'Lisa', 'Brian'],],
[8, ['Furball'],],
[10, [],],
]);
const group: ArrayGroup<number, string[]> = ArrayMap.fromMap(map);
Create a new ArrayMap from a Map of arrays.
References the given map and its array values.
// interface
function fromMapByRef<K, V>(map: Map<K, V[]>): ArrayMap<K, V>;
// example
import { ArrayMap } from '@nkp/array-map';
const map = Map<number, string[]>([
[0, ['Nick', 'John'],],
[2, ['James', 'Oliver', 'Rudolph'],],
[4, ['Steve'],],
[6, ['Irene', 'Lisa', 'Brian'],],
[8, ['Furball'],],
[10, [],],
]);
const group: ArrayGroup<number, string[]> = ArrayMap.fromMapByRef(map);
Create an ArrayMap from an array of key value arrays.
Groups together like keys and concatenates values.
// interface
function fromTuples<K, V>(array: [K, V][]): ArrayMap<K, V>;
// example
import { ArrayMap } from '@nkp/array-map';
const tuples: [string, number] = [['a', 1], ['a', 2], ['b', 3]];
// ArrayMap(
// 'a' => [1, 2],
// 'b' => [3],
// )
const group: ArrayMap<string, number> = ArrayMap.fromTuples(tuples);
Create an ArrayMap from an array key-value-arrays.
Groups together like keys and concatenates their values.
Clones the array values in the process.
// interface
function fromEntries<K, V>(entries: [K, V[]][]): ArrayMap<K, V>;
// example
import { ArrayMap } from '@nkp/array-map';
const entries: [string, number[]] = [['a', [1, 2]], ['a', [3]], ['b', 4]];
// ArrayMap(
// 'a' => [1, 2, 3],
// 'b' => [4],
// )
const group: ArrayMap<string, number> = ArrayMap.fromEntries(entries);
Create an ArrayMap from an array key-value-arrays.
Groups together like keys and concatenates their values.
Keeps reference to the original array values.
// interface
function fromEntriesByRef<K, V>(entries: [K, V[]][]): ArrayMap<K, V>;
// example
import { ArrayMap } from '@nkp/array-map';
const entries: [string, number[]] = [['a', [1, 2]], ['a', [3]], ['b', 4]];
// ArrayMap(
// 'a' => [1, 2, 3],
// 'b' => [4],
// )
const group: ArrayMap<string, number> = ArrayMap.fromEntries(entries);
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
// interface
// example
To a release a new version:
master
branch on GitHubnew release
on GitHub for the latest versionThis will trigger a GitHub action that tests and publishes the npm package.
FAQs
Zero dependency utility for working with one-to-many maps. ArrayMap is similar an es6 Map but the values are arrays.
The npm package @nkp/array-map receives a total of 12 weekly downloads. As such, @nkp/array-map popularity was classified as not popular.
We found that @nkp/array-map demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
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.
Research
Socket uncovers malicious Rust crates impersonating fast_log to steal Solana and Ethereum wallet keys from source code.
Research
A malicious package uses a QR code as steganography in an innovative technique.
Research
/Security News
Socket identified 80 fake candidates targeting engineering roles, including suspected North Korean operators, exposing the new reality of hiring as a security function.