我有以下对象,其中属性键设置为用户名,属性值设置为它们出现次数的计数,以及包含属性为{{1}的对象列表的数组}和UserId
:
UserName
如果属性值与某个数字匹配,我希望从peopleWhoAppear = { "Edward": 5, "Charlotte": 2, "Michael": 9, "Andy": 6 }
siteUsers = [
{ UserId: 1842, UserName: "Sam" },
{ UserId: 2943, UserName: "Charlotte" },
{ UserId: 1842, UserName: "Richard" },
{ UserId: 2916, UserName: "Ivan" },
{ UserId: 2073, UserName: "Paul" },
{ UserId: 1842, UserName: "Theo" }
...
]
数组中移除siteUsers
与UserName
对象中的属性键匹配的所有对象(可能是5或8)并将剩余的结果返回到另一个数组。我已经在2天内坚持了6个小时,而且我没有取得任何进展。
我尝试了peopleWhoAppear
和.filter
的不同排列和循环,但没有成功。例如:
.splice
我怎样才能做到这一点?我不能访问除jQuery之外的任何库,所以像Underscore这样的东西在这里没用。
答案 0 :(得分:4)
我尝试了
.filter
和.splice
的不同排列和循环,但没有成功。
您只需要filter
:
return siteUsers.filter(function(obj) {
var user = obj.UserName;
return !(user in peopleWhoAppear && peopleWhoAppear[user] == count);
});
这将为您提供一个新阵列,其中所有用户都没有出现在peoplWhoAppear
中或者计数错误。
答案 1 :(得分:2)
Filter()
不会更改数组,而是返回一个新数组。如果要迭代过滤数组,则必须每次将其设置为filter()
的返回值。
// copy the array
var newSiteUsers = siteUsers.slice(0)
for (var UserName in peopleWhoAppear) {
if (peopleWhoAppear[UserName ] === count) {
newSiteUsers = newSiteUsers.filter(function (person) {
console.log(person);
return person.UserName !== UserName;
}));
}
}
console.log(newSiteUsers);