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

时间:2015-01-21 19:43:07

标签: javascript arrays object

我有以下对象,其中属性键设置为用户名,属性值设置为它们出现次数的计数,以及包含属性为{{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" } ... ] 数组中移除siteUsersUserName对象中的属性键匹配的所有对象(可能是5或8)并将剩余的结果返回到另一个数组。我已经在2天内坚持了6个小时,而且我没有取得任何进展。

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

.splice

我怎样才能做到这一点?我不能访问除jQuery之外的任何库,所以像Underscore这样的东西在这里没用。

2 个答案:

答案 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);