A correct and based array implementation. 1-based indexing. obviously.
Inspired by Why you're wrong about 0-based indexing by @tjdevries
npm install --save based-array
yarn add based-array
pnpm add based-array
import { BasedArray } from "based-array";
const funkyReduce = (arr: number[]) => {
return arr.reduce((accum, item, index) => {
return accum + item * index;
}, 0);
};
let array = new BasedArray<number>(5).fill(1);
console.log(array[1]);
// 1
console.log(funkyReduce(array));
// 15
array = BasedArray.from([1, 2, 3, 4, 5]);
console.log(array[1]);
// 1
console.log(funkyReduce(array));
// 55
import { BasedArray } from "based-array";
let array = BasedArray.from([1, 2, 3, 4, 5]);
console.log(array[1]);
// 1
console.log(array[0]);
// undefined
// console.warn: you are counting from zero
BasedArray.strict();
array = BasedArray.from([1, 2, 3, 4, 5]);
console.log(array[1]);
// 1
console.log(array[0]);
// Throws error: CountingFromZeroError
Every based array method is tested against its vanilla counterpart in a thrilling batte over in tests/vanilla-vs.spec.
The example above is tested in tests/readme-example.spec.
You can run a simple performance test.
➜ based-array git:(main) ✗ npm run perf
Starting performance test with 10,000 items.
Vanilla: 0.809ms
Based: 0.657ms
Vanilla: 0.524ms
Based: 0.548ms
Finished performance test.