2016-11-24 5 views
1

Basierend auf einem schnellen Mockup wie unten muss ich URL-Route-Objekte zu einer Array-Eigenschaft in meiner App hinzufügen.Erkennen doppelter Objekteigenschaften in JavaScript

in der Funktion unten addAppRoute(routeObbj) würde Ich mag einen Scheck hinzufügen, um zu sehen, ob die neue Route bereits existiert hinzugefügt werden oder nicht in der Eigenschaft this.cache.webDevAppRoutes

Wie kann ich sicher Duplikate nicht hinzugefügt werden? Es müßte auf ein Duplikat zu beruhen module und action die gleichen

var app = { 
    cache: { 
     webDevAppRoutes: [], 
    }, 

    addAppRoute: function(route) { 
     var routes = this.cache.webDevAppRoutes; 
     routes.push(route); 
    }, 

    getAppRoutes: function() { 
     var routes = this.cache.webDevAppRoutes; 
     console.log(routes); 
    }, 

    addBookmarkAppRoutes: function() { 

     this.addAppRoute({ 
      module: 'bookmarks', 
      action: 'view', 
      params: [{ 
       id: 123 
      }], 
     }); 

     this.addAppRoute({ 
      module: 'bookmarks', 
      action: 'edit', 
      params: [{ 
       id: 123 
      }], 
     }); 

     this.addAppRoute({ 
      module: 'bookmarks', 
      action: 'add', 
      params: [], 
     }); 
    }, 

} 

Antwort

2

Gerade Schleife durch das Array zu sein und prüfen, ob es nicht bereits einen Eintrag mit diesen module und action hat. Sie können Array#some, zum Beispiel verwenden:

if (routes.some(function(r) { return r.module == route.module && r.action == route.action)) { 
    // It's a duplicate 
} 

Array#some kehrt true sobald ein Anruf an seinen Rückruf einen truthy Wert zurückgibt; Andernfalls wird false zurückgegeben.

In ES2015, das ist ein bisschen mehr prägnant:

if (routes.some(r => r.module == route.module && r.action == route.action)) { 
    // It's a duplicate 
} 
Verwandte Themen