2017-10-02 1 views
1

Ich versuche, eine generische Funktion zu schreiben, die eine übereinstimmende Menge von Datensätzen aus einem Array von Objekten abrufen wird. In diesem Array ist userId in aufsteigender Reihenfolge sortiert.welche ist besser, um einen Teil des Arrays mit Filter oder für die Schleife zu identifizieren

var myArray = [ 
{userId: 1001, name: 'User1'}, 
{userId: 1002, name: 'User2'}, 
... 
] 

// Verwendung des 1. Typs - _.filter - Meine bevorzugte Methode. Abgesehen von der Leistung verwende ich diese Methode als allgemeine Praxis im Code für die gesamte Anwendung, in der Hoffnung, mit den neuesten Methoden fortzufahren.

function getRecords(n) { 
    return _.filter(myArray, function(userRecord) { 
     return userRecord.userId < n; 
    }) 
} 

// 2. Typ Mit - Mit dieser Option auswerten, ob diese effizienter als die vorherige

function getRecords(n) { 
    var filteredRecords = []; 
    for(i=0;i < myArray.length; i++) { 
      if (myArray[i].userId < n) { 
       filteredRecords.push(myArray[i]); 
      } else { 
       break; 
      } 
    } 
    return filteredRecords; 
} 

Im zweiten Verfahren ist, ich weiß, für Schleife, bis die sofort statt Iterieren brechen Ende des Arrays, aber auf der anderen Seite wird Filter durch die Entier-Liste gehen. Ist der Filter in diesem Szenario wirklich effizient oder ist es richtig, eine for-Schleife zu betrachten? Bitte beraten.

+1

Ich denke, es wird besser sein, wenn Sie Ihre Frage bewegen –

Antwort

0

Die zweite Option ist effizienter und der richtige Weg, es zu tun.

Der Filter ist in diesem Fall nicht geeignet, da er weiter läuft, auch wenn Sie wissen, dass es keine weiteren Übereinstimmungen geben wird.

1

Sie könnten Array#some nehmen und schieben Sie die Elemente, bis Sie den Ausgangszustand erreichen. Dann geben Sie true zurück und beenden Sie damit.

function getRecords(userId) { 
    var temp = []; 
    myArray.some(function(userRecord) { 
     if (userRecord.userId >= userId) { 
      return true; 
     } 
     temp.push(userRecord); 
    }); 
    return temp; 
} 
+0

https://codereview.stackexchange.com/ möchte ich diese Alternative, da dies auch neueste Methoden anwendet. Danke für Ihre Antwort. –

Verwandte Themen