2016-07-13 5 views
2

Ich erstelle im Grunde eine getItemsByIds(ids) Funktion, wobei items ein Array von Objekten ist, die jeweils einen id Schlüssel und ids einen Array von IDs haben.Die eleganteste Art, Array nach anderem Array zu filtern

Ich bin neu auf ES6, also bin ich mir sicher, es gibt eine elegantere Lösung, und da all meine Dienste diese Art von Funktion haben, möchte ich, dass sie so optimal wie möglich ist. Hier ist, was ich habe jetzt:

getItemsByIds (ids) { 
    return this.getAllItems().then(items => items.filter(item => { 
     for (var i = 0; i < ids.length; i++) { 
      if (item.id == ids[i]) { 
       return true; 
      } 
     } 

     return false; 
    })); 
} 

Und wie ich schon sagte, das items Array ist im Grunde diese:

[{id: 0, name: 'Foo'}, {id: 1, name: 'Bar'}, {id: 2, name: 'Baz'}] 

Antwort

1

Sie es in ids.indexOf(item.id) > -1 verwandeln konnte.

getItemsByIds (ids) { 
    return this.getAllItems() 
    .then(items => items.filter(item => ids.indexOf(item.id) > -1)); 
} 
+0

Oh wie einfach. Vielen Dank! – powerbuoy

1

Eine Alternative zu Array#indexOf, wenn zur Verfügung (z.B. polyfilled), ist die Methode ES2016 Array#includes.

getItemsByIds (ids) { 
    return this.getAllItems() 
     .then(items => items.filter(item => ids.includes(item.id)); 
} 
+0

Danke auch dafür, da Alex zuerst war, und sie sind extrem ähnliche Lösung (beide sehr nett :) Ich gab ihm die Antwort. – powerbuoy

+0

@powerbuoy Gern geschehen :-) – sdgluck

Verwandte Themen