![](/img/trans.png)
[英]Loop through array of objects, check for a matching parameter and add the matching object to new array
[英]Loop through array of objects to find object with matching property
我有一個數組,一個包含所有具有唯一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
}
你必須循環users
:
var i = users.length,
ownerData;
while(i--) {
if(selectedGroup.owner == users[i].id) {
ownerData = users[i];
break;
}
}
或者您可以使用Array.filter()
:
var ownerData = users.filter(function(user) {
return user.id === selectedGroup.owner;
})[0];
在ECMAScript 6中,您可以使用本機Array.find
方法 :
var selectedUser = users.find( function( user ){
return user.id === 70;
} );
看到目前只有最新的Firefox支持這一點,你可以使用像underscore.js這樣的庫:
var selectedUser = _.find( users, function( user ){
return user.id === 70;
} );
...或者您可以使用稍微不那么新的forEach
方法的包裝器:
var selectedUser;
users.forEach( function( user ){
if( user.id === 70 ){
selectedUser = user;
}
} );
但是如果你想使用不使用庫而支持舊瀏覽器的腳本,你需要一個for循環:
var selectedUser;
for( var i = 0; i < users.length; i++ ){
if( users[ i ].id === 70 ){
selectedUser = users[ i ];
break;
}
};
看看Underscore.js來輕視這個,就像這樣:
_.findWhere(users, { id: 68 })
你自然可以傳入一個變量來匹配:
_.findWhere(users, { id: selectedGroup.owner })
您可以循環遍歷數組以匹配:
var match = function (array, matchfn) {
var i;
for (i in array) {
if (matchfn(array[i])) {
return array[i];
}
}
};
var user = match(users, function (u) { return u.id == 70; });
如果你必須使用現有的javascript對象,我認為蠻力解決方案是唯一的選擇:
var owner;
for(var i = 0; i < users.length; i++) {
if (users[i].id == selectedGroup.id) {
owner = users[i];
break;
}
}
if (owner) {
console.log(owner);
}
根據您的使用方式,重構第一個對象可能更有效,因此您可以直接訪問屬性:
var users = {
"68": {
id: 68,
name: 'mike',
domain: 'i: 0#.f | admembers | mike.ca',
email: 'mike.ca',
isAdmin: false
}
};
var selectedGroup = {
name: 'Students',
id: 78,
description: '',
owner: 68,
ownerIsUser: 'True'
};
var owner = users[selectedGroup.owner];
您還可以使用Array.prototype.some來比較所有對象屬性,以查看它們是否包含相等的值。
function haveSameValues(oneObject, anotherObject) {
var hasDifferentKeyValues = Object.keys(oneObject).some(function(key){
return oneObject[key] !== anotherObject[key]
});
return !hasDifferentKeyValues;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.