knockout-arraytransforms

2.1.1 • Public • Published

knockout-arraytransforms Build Status

Allows for creating efficient transformations of observable arrays.

var integers = ko.observableArray([
    ko.observable(10), ko.observable(9),
    ko.observable(8),  ko.observable(7),
    ko.observable(6),  ko.observable(5),
    ko.observable(4),  ko.observable(3),
    ko.observable(2),  ko.observable(1)
]);
 
var evenIntegersOver5 =
    integers.sortBy(function (n) {
        return n();
    }).filter(function (n) {
        n = n();
        return n > 5 && n % 2 === 0;
    });
 
// ko.toJS(evenIntegersOver5) -> [6, 8, 10];
 
// The sortBy and filter callbacks are only called for these new items, not
// every item in the array.
integers.splice(0, 0, ko.observable(12), ko.observable(11));
 
// ko.toJS(evenIntegersOver5) -> [6, 8, 10, 12];
 
// Set the observable containing 1 in the original array to 14. Again, the
// sortBy and filter callbacks are only called once on index 11. sortBy has
// all of the previous sort keys cached and performs a fast binary sort.
integers()[11](14);
 
// ko.toJS(evenIntegersOver5) -> [6, 8, 10, 12, 14];

Transformations

all/every, any/some, filter/reject, groupBy, map, sortBy.

Callback functions receive two arguments: an item in the original array, and an observable containing the index of that item in the original array.

var animals = ko.observableArray(["cat", "dog"]);
 
var ranks = animals.map(function (name, index) {
    return name + ": " + (index() + 1);
});
 
// ranks() -> ["cat: 1", "dog: 2"];
 
animals.reverse();
 
// ranks() -> ["dog: 1", "cat: 2"];

groupBy returns an array of objects containing a key string and a values observableArray.

var integers = ko.observableArray([1, 2, 3, 4, 5]);
 
var evenOrOdd = integers.groupBy(function (n) {
    // return value is always coerced into a string
    return n % 2 === 0;
});
 
// evenOrOdd() -> [
//     { key: "false", values: ko.observableArray([1, 3, 5]) },
//     { key: "true", values: ko.observableArray([2, 4]) }
// ]

Create your own

For examples, see ko.arraytransforms.createTransform in the source code.

License

X11. See LICENSE.

Package Sidebar

Install

npm i knockout-arraytransforms

Weekly Downloads

2

Version

2.1.1

License

X11

Last publish

Collaborators

  • mwiencek