1.3.3 • Published 3 years ago

@lopatnov/make-iterable v1.3.3

Weekly downloads
7
License
Apache-2.0
Repository
github
Last release
3 years ago

make-iterable Twitter

npm NPM version License GitHub issues GitHub forks GitHub stars GitHub top language

Patreon sobe.ru LinkedIn

Build Status Libraries.io dependency status for latest release

How to make object as array? This TypeScript library makes objects as Array like and iterable. This change allows to iterate objects, functions and their prototypes. Making prototype iterable by this library allows to create iterable objects from classes.

Install

https://nodei.co/npm/@lopatnov/make-iterable.png?downloads=true&downloadRank=true&stars=true

npm install @lopatnov/make-iterable

Browser

<script src="//lopatnov.github.io/make-iterable/dist/make-iterable.min.js"></script>

Import package to the project

TypeScript

import makeIterable from "@lopatnov/make-iterable";

JavaScript

var makeIterable = require("@lopatnov/make-iterable");

Usage of makeIterable<T>(value: T): T & any[]

Apply makeIterable method to an object, function or it's prototype and use Array methods

Make an Object Iterable and Array-Like

let x = {
  hello: "world"
};
let iterableX = makeIterable(x); // <-- now object iterableX has hello property and Array properties

iterableX.push(10); // [10]
iterableX.push(20); // [10, 20]
iterableX.push(30); // [10, 20, 30]
iterableX.push(40); // [10, 20, 30, 40]
iterableX.pop(); // [10, 20, 30]

for (const index in x) {
    /*
    "Index [0] = 10"
    "Index [1] = 20"
    "Index [2] = 30"
    "Index [hello] = world"
    */
    console.log(`Index [${index}] = ${x[index]}`);
}

for (const value of x) {
    /*
    10
    20
    30
    */
    console.log(value)
}

console.log(`x === iterableX ? ${x === iterableX}`); // true
console.log(`indexOf(30) = ${iterableX.indexOf(30)}`); // 2
console.log(`[...iterableX] = ${[...iterableX]}`); // [10,20,30]
console.log(`iterableX.hello = ${iterableX.hello}`); // "world"

Interaction with function prototype

class Simple {
  constructor(message) {
    this.message = message;
  }
}

makeIterable(Simple.prototype); // <-- now Simple.prototype has Array properties

let z = new Simple('Length is not enumerable now');
z.push([1,2], [3,4], [5,6]);

for (var index in z) {
  /*
  "z[0]=1,2"
  "z[1]=3,4"
  "z[2]=5,6"
  "z[message]=Length is not enumerable now"
  */
  console.log(`z[${index}]=${z[index]}`)
}

Demo

See, how it's working: https://runkit.com/lopatnov/make-iterable-demo-1.3.1

Test it with a runkit: https://npm.runkit.com/@lopatnov/make-iterable

Rights and Agreements

License Apache-2.0

Copyright 2019–2021 Oleksandr Lopatnov

1.3.3

3 years ago

1.3.2

4 years ago

1.3.1

4 years ago

1.3.0

4 years ago

1.2.0

4 years ago

1.1.0

4 years ago

1.0.1

4 years ago

1.0.0

4 years ago