根据另一个对象中的键和属性从数组中删除对象?

Remove objects from array based on keys & properties in another object?

我有以下对象,其中 属性 键设置为用户名,属性 值设置为它们出现的次数计数,以及一个包含具有 UserIdUserName:

属性的对象列表
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 数组中删除所有对象,其中 UserNamepeopleWhoAppear 对象中的 属性 键匹配,如果 属性 value 匹配某个数字(可能是 5 或 8)并且 return 剩余结果到另一个数组。我已经坚持了 2 天 6 个小时,但我没有取得任何进展。

我尝试了 .filter.splice 的不同排列和循环,但没有成功。例如:

 for (var UserName in peopleWhoAppear) {
   if (peopleWhoAppear[UserName ] === count) {
                siteUsers.filter(function (person) {
                    console.log(person);
                    return person.UserName !== verifier;
                }));
     }
 }

我怎样才能做到这一点?除了 jQuery 之外,我无权访问任何库,因此像 Underscore 这样的东西在这里没有用。

Filter() 不会更改数组,它 return 是一个新数组。如果要对数组进行迭代过滤,每次都要设置为filter()的return值。

// 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);

I've tried varies permutations and loops of .filter and .splice, but with no success.

你只需要filter:

return siteUsers.filter(function(obj) {
    var user = obj.UserName;
    return !(user in peopleWhoAppear && peopleWhoAppear[user] == count);
});

这将为您提供一个新数组,其中包含所有未出现在 peoplWhoAppear 中或其中计数错误的用户。