Bat*_*man 11 javascript arrays loops
我有一个数组,一个包含所有具有唯一ID的用户的列表.我有一个包含所选组信息的对象.部分信息是所有者ID.我想知道,如何根据群组所有者ID获取用户的信息?例如,学生组对象的所有者ID为70,我的网站上有一个用户ID为70的用户...如何匹配它们?
users:
[ {
id: 68
name: mike
domain: i:0#.f|admembers|mike.ca
email: mike.ca
isAdmin: False
}, etc etc ]
selectedGroup: {
name: Students
id: 78
description:
owner: 70
ownerIsUser: True
}
Run Code Online (Sandbox Code Playgroud)
Ell*_*lle 20
你必须循环users:
var i = users.length,
ownerData;
while(i--) {
if(selectedGroup.owner == users[i].id) {
ownerData = users[i];
break;
}
}
Run Code Online (Sandbox Code Playgroud)
或者您可以使用Array.filter():
var ownerData = users.filter(function(user) {
return user.id === selectedGroup.owner;
})[0];
Run Code Online (Sandbox Code Playgroud)
在ECMAScript 6中,您可以使用本机Array.find方法:
var selectedUser = users.find( function( user ){
return user.id === 70;
} );
Run Code Online (Sandbox Code Playgroud)
看到目前只有最新的Firefox支持这一点,你可以使用像underscore.js这样的库:
var selectedUser = _.find( users, function( user ){
return user.id === 70;
} );
Run Code Online (Sandbox Code Playgroud)
...或者您可以使用稍微不那么近的forEach方法的包装器:
var selectedUser;
users.forEach( function( user ){
if( user.id === 70 ){
selectedUser = user;
}
} );
Run Code Online (Sandbox Code Playgroud)
但是如果你想使用不使用库而支持旧浏览器的脚本,你需要一个for循环:
var selectedUser;
for( var i = 0; i < users.length; i++ ){
if( users[ i ].id === 70 ){
selectedUser = users[ i ];
break;
}
};
Run Code Online (Sandbox Code Playgroud)