2016-05-08 1 views
3

Итак, у меня есть эта система, которая выполняет итерацию через группу пользователей, и если их предпочтения в жанре совпадают с моими, тогда они попадают в массив потенциальных совпадений. Однако я хочу, чтобы я не мог сопоставляться с самим собой (т. Е. Пользователь с тем же идентификатором пользователя, в данном случае «324»), но я хочу, чтобы остальные совпадения были перенесены в массив.JavaScript - предотвращение нажатия определенного элемента в массив, если условие истинно.

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

Я знаю, что будет, если заявление что-то вдоль линий:

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

, но не уверен, что сделать, если заявление, какие идеи?

Результат должен выглядеть примерно так:

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

Спасибо!

ответ

3

Просто добавьте это, если заявление

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

Просто добавьте это в текущем цикле:

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

ИЛИ вы можете также добавить его с другой стороны, если цикл:

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

Вы можете использовать Array#filter и построить массив с 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>');