根据另一个对象中的键和属性从数组中删除对象?
Remove objects from array based on keys & properties in another object?
我有以下对象,其中 属性 键设置为用户名,属性 值设置为它们出现的次数计数,以及一个包含具有 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
与 peopleWhoAppear
对象中的 属性 键匹配,如果 属性 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
中或其中计数错误的用户。
我有以下对象,其中 属性 键设置为用户名,属性 值设置为它们出现的次数计数,以及一个包含具有 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
与 peopleWhoAppear
对象中的 属性 键匹配,如果 属性 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
中或其中计数错误的用户。