Entonces, tengo este sistema que itera a través de un grupo de usuarios y si su preferencia de género coincide con la mía, entonces son empujados a una variedad de posibles coincidencias. Sin embargo, lo quiero para que no pueda coincidir conmigo mismo (es decir, el usuario con el mismo ID de usuario, en este caso '324') pero quiero que el resto de las coincidencias se inserten en la matriz.

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);

Sé que será una declaración if algo similar a:

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

Pero no estoy seguro de qué hacer la declaración if, ¿alguna idea?

El resultado debería ser similar a:

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

¡Gracias!

3
mellows 8 may. 2016 a las 21:02

3 respuestas

La mejor respuesta

Simplemente agregue esto a la declaración if

for (var i = 0; i < userProfile.length; i++) {
  if (userProfile[i].userGenre == me.meGenre && userProfile[i].userid != me.meUserid) {
     potentialMatches.push(userProfile[i]);
   }
}
3
vegazz 8 may. 2016 a las 18:09

Puede usar Array#filter y compile la matriz con Array#map.

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>');
2
Nina Scholz 8 may. 2016 a las 18:13

Simplemente agregue esto dentro del bucle actual:

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

O también puede agregarlo con el otro bucle if:

if (userProfile[i].userGenre == me.meGenre && userProfile[i].userid != me.meUserid) {
     potentialMatches.push(userProfile[i]);
   }
1
Ani Menon 8 may. 2016 a las 18:11