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