2016-08-09 183 views
2

Ich versuche, herauszufinden, warum dies falsch zurückgibt:Nesting JavaScript jedes & einige

var goodUsers = [ 
 
    { id: 1 }, 
 
    { id: 2 }, 
 
    { id: 3 }, 
 
]; 
 

 
var testUsers = [ 
 
    { id: 1 }, 
 
    { id: 2 }, 
 
    { id: 3 } 
 
]; 
 

 
console.log(testUsers.every(testUser => { 
 
    goodUsers.some(goodUser => { 
 
    testUser.id === goodUser.id 
 
    }) 
 
}));

Ich glaube, mein Problem mit, wie ich some innerhalb von every bin nisten. Jede Hilfe wäre willkommen. Vielen Dank!

+1

Nur als Anmerkung, diese eine Komplexität von n^2, es würde für großen Arrays ziemlich langsam Bedeutung sein. Sie könnten das neue Set-Objekt in ES6 nutzen und so etwas wie folgendes tun: 'const idSet = new Set (goodUsers.map (goodUser => goodUser.id)); testUsers.every (testUser => idSet.has (testUser.id)); ' – andreban

Antwort

5

Ihre Rückrufe für .some und .every nicht wirklich zurückgeben alles. Deshalb hast du false bekommen.

var goodUsers = [ 
 
    { id: 1 }, 
 
    { id: 2 }, 
 
    { id: 3 }, 
 
]; 
 

 
var testUsers = [ 
 
    { id: 1 }, 
 
    { id: 2 }, 
 
    { id: 3 } 
 
]; 
 

 
console.log(testUsers.every(testUser => { 
 
    return goodUsers.some(goodUser => { 
 
    return testUser.id === goodUser.id 
 
    }); 
 
}));

Es gibt einen Unterschied zwischen tun:

goodUser => testUser.id === goodUser.id 

und

goodUser => { testUser.id === goodUser.id; } 

Die erste - ohne{} - hat eine implizitereturn. Es gibt den Wert des Ausdrucks zurück. Es ist das gleiche wie zu tun:

goodUser => { return testUser.id === goodUser.id; } 

Sie {} verwendet haben, die einen Block von Anweisungen beginnt, und die return Erklärung weggelassen.

DOKU: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

+0

Ah, OK. Ich hatte den Eindruck, dass es eine implizite "Rückkehr" für Pfeilfunktionen gab. Dies ist ein Fall, wenn es nicht ist? –

+1

Oder in der Tat, "console.log (testUesrs.every (testUser => goodUsers.some (goodUser => testUser.id === goodUser.id)));' –

+2

@WilliamC: Es gibt die * prägnante * Form, die nicht '{}' verwendet; Wenn Sie die längere Form mit '{}' verwenden, gibt es keine implizite Rückgabe. –