2013-11-09 140 views
2

在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> 

问候 熔体

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

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

我希望它能帮助。

+0

嗨达米安,照片属性值是我需要的唯一信息 - 使用arrayMap代码我得到一个错误-'p没有定义' - 关心,熔体 –

+0

对不起,现在它已修复。 – Damien