2016-05-08 8 views
3

Also ich habe dieses System, das durch eine Gruppe von Benutzern iteriert und wenn ihre Genre-Präferenz zu meinen dann in eine Reihe von möglichen Übereinstimmungen geschoben werden. Aber ich will es so, dass ich nicht mit mir selbst übereinstimmen kann (d. H. Der Benutzer mit der gleichen Benutzer-ID, in diesem Fall '324'), aber ich möchte, dass der Rest der Matches in das Array geschoben wird.JavaScript - verhindern, dass bestimmte Elemente in ein Array gedrückt werden, wenn die Bedingung erfüllt ist

var me = {meUserid: 324, meGenre: 'rock'}; 

var users = { 
    user1: {userid: 276, userGenre: 'rock'}, 
    user2: {userid: 335, userGenre: 'jazz'}, 
    user3: {userid: 324, userGenre: 'rock'}, //Same userid and genre 
    user4: {userid: 603, userGenre: 'rock'}, 
    user5: {userid: 502, userGenre: 'country'}, 
}; 

// Users array 
var userProfile = []; 

// Populate users array 
for(var key in users) { 
    userProfile.push(users[key]); 
} 

var potentialMatches = []; 

for(var i = 0; i < userProfile.length; i++){ 

    // If genre matches that of another user's genre preference, push these compatible users into matches array 
    if(userProfile[i].userGenre == me.meGenre){ 

     potentialMatches.push(userProfile[i]); 
    } 
} 

console.log(potentialMatches); 

Ich weiß, es wird entlang der Linien von einer if-Anweisung etwas sein:

if(meUserid == userProfile[i].userid){ 
    //Do something 
} 

aber bin nicht sicher, was die if-Anweisung, irgendwelche Ideen zu machen?

Das Ergebnis sollte in etwa so aussehen:

potentialMatches = [{user1: {userid: 276, userGenre: 'rock'}}, {user4: {userid: 603, userGenre: 'rock'}}] 

Dank!

Antwort

3

Fügen Sie einfach diese zu if-Anweisung

for (var i = 0; i < userProfile.length; i++) { 
    if (userProfile[i].userGenre == me.meGenre && userProfile[i].userid != me.meUserid) { 
    potentialMatches.push(userProfile[i]); 
    } 
} 
1

Gerade dieses Add innerhalb der Stromschleife:

if(userProfile[i].userid != me.meUserid){ 
    potentialMatches.push(userProfile[i]); 
} 

ODER Sie können es auch mit dem anderen hinzufügen, wenn Schleife:

if (userProfile[i].userGenre == me.meGenre && userProfile[i].userid != me.meUserid) { 
    potentialMatches.push(userProfile[i]); 
    } 
2

Sie könnten Array#filter verwenden und das Array mit Array#map erstellen.

var me = { meUserid: 324, meGenre: 'rock' }, 
 
    users = { user1: { userid: 276, userGenre: 'rock' }, user2: { userid: 335, userGenre: 'jazz' }, user3: { userid: 324, userGenre: 'rock' }, user5: { userid: 502, userGenre: 'country' } }, 
 
    result = Object.keys(users).filter(function (k) { 
 
     return users[k].userid === me.meUserid && users[k].userGenre === me.meGenre; 
 
    }).map(function (k) { return users[k] }); 
 

 
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');