从对象数组中选择Distinct

时间:2013-11-09 20:33:52

标签: knockout.js

在KO中,可以根据数组中的属性从对象数组返回Distinct列表。

我有一个'Dialog'数组,它有一个对象集合,对象中的一个属性叫做'photo'。我想从阵列中拉出不同的照片。

到目前为止我的代码:

  my.vm.uniquePhotos = ko.computed(function () {
  return ko.utils.arrayGetDistinctValues(my.vm.Dialog());
}, my.vm);

上面的代码返回了数组中的所有“照片”,但我只想要不同的照片。

    <div id="participants" data-bind='foreach: uniquePhotos'>

       <img data-bind="attr: { src: photo }" />  

   </div>

此致 熔体

1 个答案:

答案 0 :(得分:3)

要获得仅包含唯一照片的数组,您可以:

my.vm.uniquePhotos = ko.computed(function () {

    var photos = my.vm.Dialog();
    var o = {};
    var r = [];   

    for(var i=0; i<photos.length;i++)
       o[photos[i].photo] = photos[i].photo;

    for(i in o)
       r.push(o[i]);
}, my.vm);

或者,如果photo属性是对象中唯一需要的信息,则可以使用arrayMap获取包含url的数组,并使用arrayGetDistinctValues。

my.vm.uniquePhotosUrl = ko.computed(function () { 
   return ko.utils.arrayGetDistinctValues(
       ko.utils.arrayMap(my.vm.Dialog(), function(p){
          return p.photo;
       })
   );   
}, my.vm);

观点:

<div id="participants" data-bind='foreach: uniquePhotosUrl '>
    <img data-bind="attr: { src: $data}" />  
</div>

我希望它有所帮助。