2016-05-09 39 views
0

我有这个系统需要一个SoundCloud用户ID数组,通过一系列SC.get函数迭代它们以获取每个用户的信息(用户ID,用户名,以下和体裁偏好)。SoundCloud API - 根据系统中的ID创建用户配置文件

<script src="//connect.soundcloud.com/sdk.js"></script> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script> 
<body> 

<script> 
    //Initialize soundcloud API with client ID 
SC.initialize({ 
    client_id: "54cb0ff94ff9313ef6ca4674e9fe3026" 
}); 


var userIds = [9110252, 55829847, 145189041, 4184647, 225458844, 22557004, 109447512]; 

var userids = []; 
var usernames = []; 
var userFollowingsE = []; 
var profile =[]; 
var ready = 0 

for(u = 0; u < userIds.length; u++){ 

    var id = userIds[u]; 
    getUserData(id); 

    function getUserData(userid){ 

    //**************************** USER ***************************// 
    SC.get("https://stackoverflow.com/users/"+id, function(user){ 

    userids.push(user.id); 
    usernames.push(user.username); 
    }); 

    //********************** USER/FOLLOWINGS **********************// 
    SC.get('/users/'+id+'/followings',function(followings) { 

    var userFollowings = []; 

     for(i = 0; i < followings.collection.length; i++) { 
     userFollowings.push(followings.collection[i].username);           
    } 

    userFollowingsE.push(userFollowings); 

     ready++ 
     if(ready >= userIds.length) onComplete(); 
    }); 
    } 

} 

function onComplete(){ 

    console.log(usernames); 
    console.log(userIds); 
    console.log(userFollowingsE); 
} 

var users = [ 
    { userid: this.userids, 
    username: this.usernames, 
    genre: this.genres, 
    followings: this.followings, 
    } 
] 

</script> 
</body> 

我希望系统做的是将这些信息位与其对应的用户关联在一个对象中,例如,

var users = { 
    user9110252: { 
    userid = userid, 
    username = username, 
    genrePref = genre 
    followings = followings 
    } 
}//etc... 

但是,从系统输出的数组每次都会改变顺序,我不认为它们是相互关联的。

我不确定如何做到这一点,并欢迎任何建议。

回答

1

如果您希望生成的数组看起来像您所描述的那样,您应该随时创建用户对象,而不是创建多个数组,然后将它们合并。

这是我试过,运行它,看看它是否给你预期的结果。还请注意,我没有包含这些流派,因为我无法在提供的数据中找到它们。

//Initialize soundcloud API with client ID 
 
SC.initialize({ client_id: "54cb0ff94ff9313ef6ca4674e9fe3026" }); 
 

 
var userIds = [9110252, 55829847, 145189041, 4184647, 225458844, 22557004, 109447512], 
 
    users = []; 
 

 
for(var i=0; i<userIds.length; i++){ getUserData(userIds[i]); } 
 

 
function getUserData(userid){ 
 
    // The user Object you'll be building 
 
    var myUser = {}; 
 
    // Grab the info for this user 
 
    SC.get("https://stackoverflow.com/users/"+userid, function(user){ 
 
     myUser.userid = user.id; 
 
     myUser.username = user.username; 
 
     // Then get its followings 
 
     SC.get('/users/'+userid+'/followings',function(followings) { 
 
      myUser.followings = followings.collection.map(function(user){ 
 
       return user.username; 
 
      }); 
 
      // Push that user to the user list 
 
      users.push(myUser); 
 
      // Execute the callback if all users have been fetched 
 
      if(users.length == userIds.length){ onComplete(); } 
 
     }); 
 
    }); 
 
} 
 

 
function onComplete(){ 
 
    console.log(users); 
 
    // Just for the demo: 
 
    document.body.innerHTML = '<pre>' + JSON.stringify(users,0,2) + '</pre>'; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<script src="http://connect.soundcloud.com/sdk.js"></script>

+0

你是一个生命的救星!非常感谢! – mellows

相关问题