jslinq
    TypeScript icon, indicating that this package has built-in type declarations

    1.0.22 • Public • Published

    jslinq

    Another LINQ provider for Javascript

    Install NPM

    npm install jslinq --save

    Install Bower

    bower install zenprogramming.jslinq --save

    Usage

    Given the following source array:

    var data = [
        { id: 1, name: "one", category: 'fruits', countries: ["Italy", "Austria"] },
        { id: 2, name: "two", category: 'vegetables', countries: ["Italy", "Germany"] },
        { id: 3, name: "three", category: 'vegetables', countries: ["Germany"] },
        { id: 4, name: "four", category: 'fruits', countries: ["Japan"] },
        { id: 5, name: "five", category: 'fruits', countries: ["Japan", "Italy"] }
    ];

    Get jslinq queryable object

    var queryObj = jslinq(data);

    Get count of elements

    var result = queryObj
        .count();
     
    /*
    result => 5
    */

    Get all elements with toList

    var result = queryObj
        .toList();
        
    /*
    result => [
        { id: 1, name: "one", ... },
        { id: 2, name: "two", ... },
        { id: 3, name: "three", ... },
        { id: 4, name: "four", ... },
        { id: 5, name: "five", ... }
    ];
    */

    Get single element (or null) on list with singleOrDefault

    var result = queryObj
        .singleOrDefault(function(el){
            return el.name == "one";
        });
     
    /*
    result => { id: 1, name: "one", ... };
    */

    Projection on one or more properties with select

    var result = queryObj
        .select(function(el){
            return el.id;
        })
        .toList();
     
    /*
    result => [1, 2, 3, 4, 5];
    */

    Filter elements with where

    var result = queryObj
        .where(function(el){
            return el.name == 'two';
        })
        .toList();
     
    /*
    result => [{ id: 2, name: "two", ... }];
    */

    Make a groupBy and count on each group

    var result = queryObj
        .groupBy(function(el){
            return el.category;
        })
        .toList();
     
    /*
    result => [
        { key: 'vegetables', count: 2, elements: [...] }, 
        { key: 'fruits', count: 3, elements: [...] }, 
    ];
    */

    Merge two arrays with join

    var otherData = [
        { id: 7, name: "seven", category: 'vegetables' }, 
        { id: 8, name: "eight", category: 'fruit' }
    ];
     
    var result = queryObj
        .join(otherData)
        .toList();
    /*
    result => [
        { id: 1, name: "one", ... },
        { id: 2, name: "two", ... },
        { id: 3, name: "three", ... },
        { id: 4, name: "four", ... },
        { id: 5, name: "five", ... }, 
        { id: 7, name: "seven", ... }, 
        { id: 8, name: "eight", ... }
    ];
    */

    Get distinct elements without repetitions

    var extraData = ["A", "B", "C", "B", "A", "D"];
     
    var result = jslinq(extraData)
        .distinct()
        .toList();
    /*
    result => ["A", "B", "C", "D"];
    */

    Sort ascending using orderBy

    var result = queryObj
        .orderBy(function(el){
            return el.name;
        })
        .toList();
    /*
    result => [
        { id: 5, name: "five", ... },
        { id: 4, name: "four", ... },
        { id: 1, name: "one", ... },
        { id: 3, name: "three", ... },
        { id: 2, name: "two", ... }
    ];
    */

    Sort descending using orderByDescending

    var result = queryObj
        .orderByDescending(function(el){
            return el.name;
        })
        .toList();
    /*
    result => [
        { id: 2, name: "two", ... },
        { id: 3, name: "three", ... },
        { id: 1, name: "one", ... },
        { id: 4, name: "four", ... },
        { id: 5, name: "five", ... }
    ];
    */

    Select multiple elements with selectMany

    var result = queryObj
        .selectMany(function(el){
            return el.countries;
        })
        .toList();
    /*
    result => [
        "Italy", "Austria", "Italy", "Germany", 
        "Germany", "Japan", "Japan", "Italy"] }
    ];

    Get the first matching element with firstOrDefault

    var result = queryObj
        .firstOrDefault(function(el){
            return el.category == "vegetables";
        });
    /*
    result => { id: 2, name: "two", ... };
    */

    Get the last matching element with lastOrDefault

    var result = queryObj
        .lastOrDefault(function(el){
            return el.category == "vegetables";
        });
    /*
    result => { id: 3, name: "three", ... };
    */

    Check if at least one elements matchs expression with any

    var result = queryObj
        .any(function(el){
            return el.name == "two";
        });
    /*
    result => true;
    */

    Check if all elements match expression with all

    var result = queryObj
        .all(function(el){
            return el.countries.length > 0;
        });
    /*
    result => true;
    */

    Skip the number of specified elements with skip

    var result = queryObj
        .skip(3)
        .toList();
    /*
    result => [
        { id: 4, name: "four", ... },
        { id: 5, name: "five", ... }
    ];
    */

    Take the number of specified elements with take

    var result = queryObj
        .take(2)
        .toList();
    /*
    result => [
        { id: 1, name: "one", ... },
        { id: 2, name: "two", ... }
    ];
    */

    Get the maximum element using specific expression with max

    var result = queryObj
        .max(function(el){
            return el.id;
        });
    /*
    result => 5;
    */

    Get the minimum element using specific expression with min

    var result = queryObj
        .min(function(el){
            return el.id;
        });
    /*
    result => 1;
    */

    Get elements contained on two array with intersect

    var otherData = [
        { id: 2, name: "two", category: 'vegetables' }, 
        { id: 8, name: "eight", category: 'fruit' }
    ];
     
    var result = queryObj
        .intersect(otherData, function(el){
            return el.id;
        })
        .toList();
    /*
    result => [
        { id: 2, name: "two", ... }
    ];
    */

    Remove one element using remove

     
    var elementToRemove = queryObj
        .singleOrDefault(function(el){
            return el.id == 2;
        });
     
    var result = queryObj
        .remove(elementToRemove)
        .toList();
    /*
    result => [
        { id: 1, name: "one", ... },
        { id: 3, name: "three", ... },
        { id: 4, name: "four", ... },
        { id: 5, name: "five", ... }
    ];
    */

    Remove, from source array, specified elements with subtract

     
    var elementsToSubtract = [
        { id: 2, name: "two", ... },
        { id: 4, name: "four", ... },
        { id: 7, name: "seven", ... }
    ];
                
    var result = queryObj
        .subtract(elementsToSubtract, function(el){
            return el.id;
        })
        .toList();
    /*
    result => [
        { id: 1, name: "one", ... },
        { id: 3, name: "three", ... },
        { id: 5, name: "five", ... }
    ];
    */

    Sum numeric values with sum

                
    var result = queryObj
        .sum(function(el){
            return el.id;
        });
    /*
    result => 15
    ];
    */

    Calculate average on numeric values with average

     
    var sampleData = [
        { value: 3 },
        { value: 2 },
        { value: 5 },
        { value: 2 },
    ];
     
    var result = jslinq(sampleData)
        .average(function(x) { 
            return x.value; 
        });
                
    /*
    result => 3
    ];
    */

    You can also chain multiple methods

     
    var result = queryObj
        .where(function(el) { return el.category == 'fruits' })
        .select(function(el) { return el.id; })
        .toList();
    /*
    result => [1, 4, 5];
    */

    ...and use jslinq nested inside functions

     
    var result = queryObj
        .where(function(el) { 
        
            //Check if element has at least one country equals to "Italy"
            var hasItaly = jslinq(el.countries)
                .any(function(c){
                    returc c == "Italy";
                });
            return hasItaly; 
        })
        .toList();
    /*
    result => [
        { id: 1, name: "one", ... , countries: ["Italy", "Austria"] },
        { id: 2, name: "two", ... , countries: ["Italy", "Germany"] },
        { id: 5, name: "five", ... , countries: ["Japan", "Italy"] }
    ];
    */

    Install

    npm i jslinq

    DownloadsWeekly Downloads

    168

    Version

    1.0.22

    License

    MIT

    Unpacked Size

    73.6 kB

    Total Files

    13

    Last publish

    Collaborators

    • maurobussini