Agregar con los artículos de Knockout JS a una matriz observable pero no muestran duplicados en la tabla?

StackOverflow https://stackoverflow.com//questions/20001170

Pregunta

Tengo una matriz observable en el modelo de vista de My Knockout JS que se une a una tabla HTML en mi vista (vista de afeitar en MVC).

Esta tabla llena con elementos de otra tabla que tienen un botón "Agregar", por lo que el usuario puede agregar la mayor parte del mismo elemento a la tabla de destino.Mi problema es que quiero mostrar en mi otra tabla solo una para cada artículo ... Entonces, si el usuario agrega el item1 30 veces, la tabla necesita mostrar el artículo1 a 30 y no 30 veces el artículo1. Pero, por supuesto, la matriz observabledebe tener esos artículos de 30 item1.

¿Cómo puedo hacer eso?

¿Fue útil?

Solución

Pruebe este fragmento de código donde self.items es su matriz original con todos los elementos.

self.unique = ko.computed(function() {
    var values = ko.utils.arrayMap(self.items(), function(item){ return item.type})
    return ko.utils.arrayGetDistinctValues(values).sort();
});

Otros consejos

Intente agrupar la matriz por conteo como este

function GroupArrayByCount(arr) {
    var a = [],
        b = [],
        prev, result = [];

    arr.sort();
    for (var i = 0; i < arr.length; i++) {
        if (arr[i] !== prev) {
            a.push(arr[i]);
            b.push(1);
        } else {
            b[b.length - 1]++;
        }
        prev = arr[i];
    }
    for (var j = 0; j < a.length; j++) {
        result.push({
            name: a[j],
            count: b[j]
        });
    }
    return result;
}

Ahora llámelo en ViewModel como este.

self.groupedItems = ko.computed(function(){
    return GroupArrayByCount( self.items());
});

Fiddle: http://jsfiddle.net/codovations/edjwu/

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top