根据另一个对象中的键和属性从数组中删除对象
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
数组中删除所有对象,如果属性值与某个数字(可能是 5 或 8)匹配,则UserName
与peopleWhoAppear
对象中的属性键匹配,并将剩余结果返回给另一个数组。我已经在 6 天内坚持了 2 个小时,我没有取得任何进展。
我尝试过.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
和.splice
的不同排列和循环,但没有成功。
您只需要filter
:
return siteUsers.filter(function(obj) {
var user = obj.UserName;
return !(user in peopleWhoAppear && peopleWhoAppear[user] == count);
});
这将为您提供一个新数组,其中包含未出现在peoplWhoAppear
中或计数错误的所有用户。
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);
相关文章:
- 如何在不链接/jquery的情况下使用方法应用css属性数组
- 如何使用lodash返回与模式匹配的属性数组
- 从嵌套属性数组中获取对象嵌套值
- 如何使用 javascript 返回数据属性数组
- JQuery 获取返回的属性数组
- 对公共属性数组进行排序
- Angularjs-ng repeat不反映属性数组中的更改
- JADE&NodeJS访问JSON对象属性数组
- Lodash 按数组的属性数组过滤
- 将对象数组转换为属性数组
- 如何从一个共享属性的jQuery集合中获取一个属性数组
- 骨干移除和新视图不会重置其属性数组内容
- 使用JSON从对象数组创建属性数组
- 将数据属性数组转换为对象
- 从属性数组和匹配属性值数组创建JavaScript对象的有效方法
- 访问json中的属性数组
- jquery.获得没有重复的自定义属性数组
- 如何更新对象属性数组值
- 多属性数组语法
- jQuery:生成"name”;动态属性数组