【问题标题】:knockout arraygetdistinctvalues of objects剔除数组获取对象的不同值
【发布时间】:2015-06-08 23:40:25
【问题描述】:

我想在数组中的多个属性上使用this fiddle 中的ko.utils.arrayGetDistinctValues,因此我将数组映射到仅包含我想要的两个属性的数组

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);

然后我尝试使用arrayGetDistinctValues,但它似乎不适用于对象。

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

My modified fiddle here

谁能告诉我怎么做?

【问题讨论】:

    标签: knockout.js


    【解决方案1】:

    arrayGetDistinctValues 仅适用于原始值。对于对象,您将需要不同的方法。这是一个可行的版本。

    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/

    【讨论】:

      【解决方案2】:

      作为对 Michael Best 答案的更新,这里使用了更新的 KnockoutJS v3 代码约定(例如,dependentObservable = computed 和使用 arrayFilter 方法):

      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})
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-10-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-22
        • 2013-02-14
        • 2021-02-07
        • 1970-01-01
        相关资源
        最近更新 更多