2016-07-20 7 views
0

Ich habe ähnliche Beiträge zu diesem Thema gesehen, aber ich kann mein Problem mit den Antworten aus anderen Posts nicht lösen. Ich habe die folgende Funktion eindeutige Werte aus einem großen Array zurück:jQuery 'unique' keine tatsächlichen eindeutigen Werte in Safari

self.availableActivies = ko.computed(function() { 
    var activities = []; 
    $.each(self.data(), function(i, s){ 
     activities.push(s.activities); 
    }); 
    return $.unique(activities); 
}); 

Als ich s.activities auf die ‚Aktivitäten‘ Array schieben, ich habe ein Array mit etwa 30 wiederholt Aktivitäten, aber nur 4 einzigartigen Aktivitäten.

Die letzte jQuery-Zeile gibt genau das zurück, was ich in chrome brauche, aber ich kann nicht herausfinden, wie dies ohne jQuery funktioniert, damit es in allen Browsern funktioniert.

+0

'if (jQuery.inArray (s.activities, Aktivitäten) == 1) { // das Element nicht in dem Array activities.push ist (s.activities); }; "versuchen Sie es so – guradio

+0

Wie ist die Datenstruktur von Elementen im' activities' Array? –

Antwort

1

$.unique funktioniert with DOM.

enter image description here Es scheint jedoch activities ist eine andere Art von Array.


  • So versuchen $.unique(activities.sort());

  • Auf jeden Fall empfehlen wir stattdessen $.inArray & $.grep für ein Array zu verwenden wie activites,

    function customUnique(array) { 
        return $.grep(array, function(el, index) { 
         return index === $.inArray(el, array); 
         }); 
        } 
    

    Dann:

    self.availableActivies = ko.computed(function() { 
        var activities = []; 
        $.each(self.data(), function(i, s){ 
         activities.push(s.activities); 
        }); 
        return customUnique(activities); 
        }); 
    
+1

Danke. Der $ unique (activities.sort()); Option hat gut funktioniert. Vielen Dank für Ihre Zeit. – JordanBarber

+0

sind Sie willkommen. Viel Spaß mit jfile pacakge: http://npmjs.com/package/jfile –