Knockout arraygetdistinctvalues โ€‹โ€‹of objects

I want to use ko.utils.arrayGetDistinctValues , as in this script for more than one property in the array, so I map the array to the array just the two properties I want

 viewModel.justCategories = ko.dependentObservable(function() { var categories = ko.utils.arrayMap(this.items(), function(item) { return { catid : item.catid(), category : item.category() }; }); return categories.sort(); }, viewModel); 

then I'm trying to use arrayGetDistinctValues , but it does not work on objects.

 viewModel.uniqueCategories = ko.dependentObservable(function() { return ko.utils.arrayGetDistinctValues(viewModel.justCategories()).sort(); }, viewModel); 

My modified fiddle is here

Can someone tell me how to do this?

+4
source share
2 answers

arrayGetDistinctValues only works with primitive values. For objects you need a different approach. Here is the version that works.

 viewModel.uniqueCategories = ko.dependentObservable(function() { var seen = []; return viewModel.justCategories().filter(function(n) { return seen.indexOf(n.catid) == -1 && seen.push(n.catid); }); }); 

http://jsfiddle.net/mbest/dDA4M/2/

+8
source

As an update for Michael Best Answer, here is something using later versions of KnockoutJS v3 code (e.g. dependObservable = computed and using the arrayFilter method):

 var uniqueSizes = ko.computed({read: function() { var seen = []; return ko.utils.arrayFilter(viewModel.collection.vendorGearFilters(), function(f) { return seen.indexOf(f['size_abbr']()) == -1 && seen.push(f['size_abbr']()); }); }, deferEvaluation: true}) 
+2
source

All Articles