JavaScript - 如果条件为真,则阻止将某些元素推送到数组中

时间:2016-05-08 18:02:44

标签: javascript loops if-statement push

所以我有这个系统迭代一组用户,如果他们的类型偏好与我的匹配,那么他们将被推入一系列潜在的匹配。但是我想要它以便我无法与自己匹配(即具有相同用户ID的用户,在本例中为'324')但我希望将其余的匹配推送到数组中。

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语句:

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

但不确定if声明是什么,有什么想法吗?

结果应该类似于:

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

谢谢!

3 个答案:

答案 0 :(得分:3)

只需将其添加到if语句

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

答案 1 :(得分:2)

您可以使用Array#filter并使用Array#map构建数组。

&#13;
&#13;
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>');
&#13;
&#13;
&#13;

答案 2 :(得分:1)

只需在当前循环中添加:

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

或者您也可以将其与其他if循环一起添加:

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