collecty
v5.5.1
Published
allows iterating an array of elements with an easy-to-read syntax and gives functionality to the collection and the elements it iterates.
Downloads
23
Maintainers
Readme
Collecty
This is an amazing library that allows you to create collections and iterate over them (similar like laravel collections), allowing you to create functionality for the collections and the elements it iterates over.
The Collecty
class provides a fluent, convenient wrapper for working with arrays of data.
instalation
npm install collecty
basic usge
for example, maybe you could have an array of authors as a json format:
const authorsArray = [
{
"name": "Arthur",
"gender": "male",
"age": 15
},
{
"name": "Veronica",
"gender": "female",
"age": 40
},
{
"name": "Johnson",
"gender": "male",
"age": 33
}
]
import the Collection
If you are using ECMAScript Modules:
import Collecty from 'collecty';
If you are using CommonJS:
const Collecty = require('collecty');
If you are using the web browser:
<script src="https://unpkg.com/collecty@latest/dist/umd/index.umd.cjs"></script>
in the next code, as you can see, you can create your own collection, allowing you to transform each element that it has from an object to your custom Author class
import Collecty from 'collecty'
class AuthorCollection extends Collecty.Collection {
/**
* each iteration will return an Author
*
**/
public item(item:any): Author {
return new Author(item)
}
/**
* You can create your custom filters for your own collection
*
**/
public malePeople(): AuthorCollection{
// ... code
}
public femalePeople(): AuthorCollection {
// ... code
}
}
class Author {
public item;
constructor(item:any) {
this.item = item
}
public gender(): boolean {
// ... code
}
public isLegalAge(): boolean {
// .. code
}
}
const authors = new AuthorCollection(authorsArray)
In the code above, you can easily get the male or female people with an easy-to-read-syntax:
authors.malePeople()
and you can know if each person is legal age or not:
for (const author of authors) {
console.log(author.isLegalAge())
}
available methods
concat( array: any[] ): void
const collection = new AuthorCollection([
{
"name": "Arthur",
"gender": "male",
"age": 15
},
{
"name": "Veronica",
"gender": "female",
"age": 40
},
{
"name": "Johnson",
"gender": "male",
"age": 33
}
])
collection.concat([{
"name": "Carl",
"gender": "male",
"age": 56
}])
console.log(collection.toArray())
// output
> [{
"name": "Arthur",
"gender": "male",
"age": 15
},
{
"name": "Veronica",
"gender": "female",
"age": 40
},
{
"name": "Johnson",
"gender": "male",
"age": 33
}, {
"name": "Carl",
"gender": "male",
"age": 56
}]
contains( callback : (item:any) => any ): boolean
checks if the collection
contains at least one item which matches with the callback
const collection = new AuthorCollection([{
"name": "Johnson",
"gender": "male",
"age": 33
}, {
"name": "Carl",
"gender": "male",
"age": 56
}])
collection.contains( (author: Author) => author.age() > 50 )
// output
> true
collection.contains((author: Author) => {
return author.age() < 30
})
// output
> false
count(): number
gets total items in the collection
const collection = new AuthorCollection([{
"name": "Johnson",
"gender": "male",
"age": 33
}, {
"name": "Carl",
"gender": "male",
"age": 56
}]);
console.log("total", collection.count())
// output
> total 3
filter( callback: (any) => any ): any
returns a new collection
with the items
that match with the callback given
let collection = new Collection([1, 2, 3])
let newCollection = collection.filter((item: number) => {
return item <= 2
})
console.log(newCollection.toArray())
// output
> [1,2]
first(): any
gets the first item in the collection
const collection = new Collection([1,2,3])
console.log("first element", collection.first())
// output
> first element 1
firstWhere( callback: (any) => any ): any
gets the first item which match with the callback condition
let persons = new PersonCollection([{
'name': 'rix'
}, {
'name': 'roger'
}])
const person = persons.firstWhere((person: Person) => {
return person.name() == "roger"
})
// output
> Person { item { name: "roger" } }
fromJson( json: string ): Collection
creates a new collection from a json
collection = Collection.fromJson("[1,2,3]")
get(): any
gets the item acording to the given index
const collection = new Collection([1, 2, 3])
console.log(collection.get(1))
\\ output
> 2
isEmpty(): boolean
checks if the collection has at least one item
const collection = new Collection([1,2,3])
console.log(collection.isEmpty())
// output
> false
const collection = new Collection([])
console.log(collection.isEmpty())
// output
> true
map( callback: (any) => any ): Collection
returns a collection with the data mapped for each element
class PersonCollection extends Collection {
item(item: any): Person {
return new Person(item)
}
}
class Person {
private item;
constructor(item: any) {
this.item = item
}
public name() {
return this.item.name
}
}
let persons = new PersonCollection([{
'name': 'rix'
}, {
'name': 'roger'
}])
const names = persons.map((person: Person) => {
return person.name()
})
pop(item:any): void
let collection = new Collection([1,2,3])
console.log(collection.pop())
// output
> 3
console.log(collection.torray())
// output
> [1,2]
push(item:any): void
push new item
to the collection
let collection = new Collection([1,2,3])
collection.push(4)
collection.toArray()
// output
> [1,2,3,4]
random(): any
gets a random item
collection = new Collection([1,2,3])
console.log(collection.random())
//output
> 3 (obtained randomly)
toArray(): any[]
Transforms the collection to a javascript native array
collection = new Collection([1,2,3])
console.log(collection.toArray())
// output
> [1,2,3]
TO-DO list
- [ ] last method
- [ ] flatten method
- [ ] notContains method
- [ ] merge method
- [ ] StringCollection class
- [ ] ObjectCollection class
- [ ] NumberCollection class
Are you a collaborator?
if you whish to collaborate to Collecty, you can pull request to the repository: click here to go to the repository
How to publish the package?
- commit the changes:
git commit -am <message>
- Change the version
npm version <patch | minor | major>
- Login (if not already logged in)
npm login
- Publish the package
npm publish