Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

collect-js

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

collect-js

A JavaScript library for collecting data from tree data structures

  • 0.0.4
  • latest
  • npm
  • Socket score

Version published
Weekly downloads
53
increased by130.43%
Maintainers
1
Weekly downloads
 
Created
Source

Collect.js

A JavaScript library for collecting data from tree data structures.

Build Status

Install

You can install the collect-js using npm the following way:

npm install collect-js

You can require the Factory.js using require.js the following way:

define('path/to/collect-js', function (collect) {
    // define you're module that uses the collect function
});

If you choose to use the library directly in the browser the collect function will be installed in the global namespace under the name:

weknowhow.collect

Usage

Given the following test data the examples below shows how the library can be used.

var store = {
  store: {
    book: [
      {
        category: "reference",
        author: "Nigel Rees",
        title: "Sayings of the Century",
        price: 8.95
      },
      {
        category: "fiction",
        author: "Evelyn Waugh",
        title: "Sword of Honour",
        price: 12.99,
        tags: [
          "fiction"
        ]
      },
      {
        category: "fiction",
        author: "Herman Melville",
        title: "Moby Dick",
        isbn: "0-553-21311-3",
        price: 8.99
      },
      {
        category: "fiction",
        author: "J. R. R. Tolkien",
        title: "The Lord of the Rings",
        isbn: "0-395-19395-8",
        price: 22.99,
        tags: [
          "fiction",
          "adventure"
        ]
      },
      {
        category: "programming",
        author: ["Andrew Hunt", "David Thomas"],
        title: "The Pragmatic Programmer: From Journeyman to Master",
        isbn: "0-201-61622-X",
        price: 33.68,
        tags: [
          "programming",
          "apprenticeship",
          "best practices"
        ]
      }
    ],
    bicycle: {
      color: "red",
      price: 19.95
    }
  }
};

Collecting an array of all books in the store

expect(collect('store.book', store), 'to equal', store.store.book);

Collecting an array of all bicycles in the store

expect(collect('store.bicycle', store), 'to equal', [store.store.bicycle]);

Collecting the isbn of all books in the store

expect(collect('store.book.isbn', store), 'to equal', [
  "0-553-21311-3", "0-395-19395-8", "0-201-61622-X"
]);
expect(collect('..isbn', store), 'to equal', [
  "0-553-21311-3", "0-395-19395-8", "0-201-61622-X"
]);
expect(collect('..book.isbn', store), 'to equal', [
  "0-553-21311-3", "0-395-19395-8", "0-201-61622-X"
]);
expect(collect('store', 'book', 'isbn', 'store'), 'to equal', [
  "0-553-21311-3", "0-395-19395-8", "0-201-61622-X"
]);

Collecting the price of all items in the store

expect(collect('store..price', store), 'to equal', [
  8.95, 12.99, 8.99, 22.99, 33.68, 19.95
]);

Collecting the price of all books in the store

expect(collect('store..book.price', store), 'to equal', [
  8.95, 12.99, 8.99, 22.99, 33.68
]);

Collecting the price of all books and bicycles in the store

expect(collect('store', /book|bicycle/, 'price'), 'to equal', [
  8.95, 12.99, 8.99, 22.99, 33.68
]);

Collecting all books that has an isbn

var booksWithIsbn = collect('..book', store).filter(function (book) {
  return collect('isbn', book).length > 0;
});

expect(booksWithIsbn, 'to equal', [
  store.store.book[2],
  store.store.book[3],
  store.store.book[4]
]);

Collecting all books without an isbn

var booksWithoutIsbn = collect('..book', store).filter(function (book) {
  return collect('isbn', book).length > 0;
});

expect(booksWithoutIsbn, 'to equal', [
  store.store.book[0],
  store.store.book[1]
]);

Answering whether any books are present of a given author

var authors = collect('..author', store);
expect(authors.indexOf('David Thomas'), 'to not be', -1);
expect(authors.indexOf('J. R. R. Tolkien'), 'to not be', -1);
expect(authors.indexOf('Robert C. Martin'), 'to be', -1);

Collecting all books with a price below 10

var cheapBooks = collect('..book', store).filter(function (book) {
  return book.price < 10;
});

expect(cheapBooks, 'to equal', [
  store.store.book[0],
  store.store.book[2]
]);

Collecting all books with more than one author

var booksWithMoreThanOneAuthor = collect('..book', store).filter(function (book) {
  return collect("author", book).length > 1;
});

expect(booksWithMoreThanOneAuthor, 'to equal', [
  store.store.book[4]
]);

Collecting all book categories without any duplicates

var result = collect('..book.category', store).reduce(function (categories, category) {
  if (categories.indexOf(category) === -1) {
    categories.push(category);
  }
  return categories;
}, []);

expect(result, 'to equal', [
  'reference', 'fiction', 'programming'
]);

License

Copyright 2013 Sune Simonsen
https://github.com/sunesimonsen/collect-js

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

FAQs

Package last updated on 27 Oct 2013

Did you know?

Socket

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.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc