Javascript Angularjs中对象数组之间的差异
我用的是有角度的。我试图比较两个对象数组 我能让它像这样工作:Javascript Angularjs中对象数组之间的差异,javascript,angularjs,lodash,Javascript,Angularjs,Lodash,我用的是有角度的。我试图比较两个对象数组 我能让它像这样工作: var compareUsers = function () { //Comparing assigned groups with all to return available users var assignedUsersIds = {}; var usersIds = {}; availableUsers = []; //declared higher up, populated with
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
,无论您多久调用compareuser
,它都会累加(显然)
在第二个示例中,每次调用compareUsers
时,您都会覆盖可用用户
,并将结果与.filter
我建议不要这样做:
availableUsers = _.filter(allUsers, function(user){
return !_.findWhere(assignedUsers, user);
});
你可以:
availableUsers = availableUsers.concat(_.filter(allUsers, function(user){
return !_.findWhere(assignedUsers, user);
}));
这应该行得通。它将在
可用用户
数组中显示\uu.filter
的结果,所以我刚刚尝试了它。起初,它说不能concat undefined
,这可能是因为我没有声明它是一个数组。因此,在函数的最顶端,我设置了availableUsers=[]代码>然后是您建议的,但现在它只是返回一个空数组。这可能与此相关。如果在函数顶部将其设置为空数组,则它将不起作用。在第一个示例中,您注释了“声明更高”。在第二个示例中,还应该在函数外部声明数组。我认为你的lodash过滤器功能没有达到你想要的效果。它正在运行,但我还是遇到了和以前一样的问题。我现在要睡觉了,明天我得回去。如果我发现了,我会更新的。好吧,我知道问题出在哪里。Angurlajs正在向名为haskey
的对象添加一个属性,但我的assigned users数组没有此属性。所以当它检查对象是否相同时,它看到的是一个对象的这个属性,而不是另一个,所以它返回false。我不能比较整个对象,我必须坚持比较ID