2013-11-09 4 views
2

В KO можно вернуть выделенный список из массива объектов на основе свойства в массиве.Выбрать Distinct from Object Array

У меня есть массив «Диалог», который имеет коллекцию объектов, одним из свойств объекта является вызов «фото». Я хочу просто вытащить отличные фотографии из массива.

Мой код до сих пор:

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> 

С уважением Melt

+0

Привет, Damien, я не хочу, чтобы объекты были уникальными именами «фотографий», которые существуют в массиве, поэтому в конце фрагмента Dialog я могу отображать уникальные «фотографии» людей участвовал в диалоге - надеюсь, что я объяснил, что OK - Спасибо - Melt –

ответ

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

Привет, Damien, значение свойства фотографии - это единственная информация, которая мне нужна - с использованием кода arrayMap. Я получаю сообщение об ошибке -'p не определен '- С уважением, Melt –

+0

Извините, теперь исправлено. – Damien