Array
Compare
From Utility functions in KnockoutJS
Sample
//find any unused categories
viewModel.missingCategories = ko.dependentObservable(function() {
//find out the categories that are missing from uniqueNames
var differences = ko.utils.compareArrays(viewModel.categories, viewModel.uniqueCategories());
//return a flat list of differences
var results = [];
ko.utils.arrayForEach(differences, function(difference) {
if (difference.status === "deleted") {
results.push(difference.value);
}
});
return results;
}, viewModel)
The result of ko.utils.compareArrays
is an array that contains items with a
status property (added
, deleted
, or retained
) and a value
property holding the original item.
Operations
From 10 things to know about KnockoutJS on day one:
An observableArray
is actually just an observable. They follow the same
rules and have the same features as observables.
An observableArray
also has some extra methods added to it to perform basic
array operations. These functions perform their action on the underlying array
and then notify subscribers that there was a change. These methods include:
pop
push
reverse
shift
sort
splice
unshift
In addition to the those operations, there are several other methods added for common operations. These include:
remove
removeAll
destroy
destroyAll
replace
indexOf
Sample
//remove an item
items.remove(someItem);
//remove all items with the name "Bob"
items.remove(function(item) {
return item.name === "Bob"
});
//remove all items
items.removeAll();
//pass in an array of items to remove
items.removeAll(itemsToRemove)
//retrieve the index of an item
items.indexOf(someItem);
//replace an item
item.replace(someItem, replaceItem);
Note: destroy
/destroyAll
work like replace
/replaceAll
, except
they only mark the items as destroyed and don’t actually remove them.