2

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

我有一个包含对象集合的“对话框”数组,对象中的一个属性是调用“照片”。我只想从数组中提取不同的照片。

到目前为止我的代码:

  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>

问候融化

4

1 回答 1

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

或者,如果照片属性是您在对象中需要的唯一信息,您可以使用 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>

我希望它有所帮助。

于 2013-11-09T21:01:17.607 回答