Angularjs中对象数组之间的差异
Difference between array of objects in Angularjs
我使用的是Angular。我试着比较两组物体我可以这样做:
var compareUsers = function () {
//Comparing assigned groups with all to return available users
var assignedUsersIds = {};
var usersIds = {};
availableUsers = []; //declared higher up, populated with user objects on load
//assignedUsers, declaired higher up, populated by function calling compareUsers
assignedUsers.forEach(function (el, i) {
assignedUsersIds[el.id] = assignedUsers[i];
});
allUsers.forEach(function (el, i) {
usersIds[el.id] = allUsers[i];
});
for (var i in usersIds) {
if (!assignedUsersIds.hasOwnProperty(i)) {
availableUsers.push(usersIds[i]);
}
};
console.log(availableUsers);
return availableUsers;
}
我找到了一种更好的方法,所以我使用lodash
:将其重构为
var compareUsers = function () {
availableUsers = _.filter(allUsers, function(user){
return !_.findWhere(assignedUsers, user);
});
console.info(availableUsers);
return availableUsers;
}
然而,我没有得到正确的结果,也不确定我搞砸了什么。新方法返回某些组的assignedUsers
列表中的availableUsers
。第一次运行时,它似乎很有效,但如果我不断改变我所关注的组,结果就会全部消失,无法相加。
我在这里找到了这个方法。
在第一个例子中,您使用的是Array.push
,无论您多么频繁地调用compareUsers
,它总是在累加(显然)。
在第二个示例中,每次使用_.filter
的结果调用compareUsers
时,都会覆盖availableUsers
我建议不要这样做:
availableUsers = _.filter(allUsers, function(user){
return !_.findWhere(assignedUsers, user);
});
你知道:
availableUsers = availableUsers.concat(_.filter(allUsers, function(user){
return !_.findWhere(assignedUsers, user);
}));
这应该行得通。它将用_.filter
的结果来连接availableUsers
数组。
相关文章:
- 在 JavaScript 数组中的所有元素之间穿插元素的简洁方法
- 效率:整数数组的一个子集中两个项之间的最大差值
- 使用Javascript获取两个字符串之间的字符串数组
- 如何将json文件中的数据提取到对象数组中,并在两个控制器之间共享
- 尝试在一个对象的值和一个对象数组之间进行匹配
- 在angularJS中使用模态窗口时,在控制器之间共享对象数组
- 无法在提交之间清空数组
- 使用工厂/服务在控制器AngularJS之间推送数组中的数据
- 数组和ArrayBuffer之间的区别是什么
- 只有一些带undercore.js的字段在对象数组之间求交集和等于
- 如何在数组中循环,等待每个项目之间的时间
- 在数组中的偶数之间插入连字符
- 创建新数组和清除长度之间的差异
- 如何循环数组并保持它们之间的索引增长
- for(数组中的i)和for(var i=0;i<array.length;i++)之间的差异
- 在javascript数组元素之间添加换行符
- 我如何获得 Javascript 中关联数组和常规数组之间的区别
- 如何确定数组中的值是否位于两个附加数组的所有并行索引的值之间
- 数组值和字符串之间的 JavaScript 比较
- AngularJS控制器语法 - 数组和函数版本之间的差异