Javascript 下划线差异不适用于JSON对象数组

Javascript 下划线差异不适用于JSON对象数组,javascript,json,underscore.js,difference,Javascript,Json,Underscore.js,Difference,我有一个要使用u.difference筛选的用户列表。但它并不致力于比较这些对象。只有当我只比较用户名时,它才起作用。以下是代码片段: var users = [ { "username": "user1", "birthdate": "birth1" }, { "username": "user2", "birthdate": "birth2" }, {

我有一个要使用u.difference筛选的用户列表。但它并不致力于比较这些对象。只有当我只比较用户名时,它才起作用。以下是代码片段:

    var users = [
      {
        "username": "user1",
        "birthdate": "birth1"
      },
      {
        "username": "user2",
        "birthdate": "birth2"
      },
      {
        "username": "user3",
        "birthdate": "birth3"
      },
      {
        "username": "user4",
        "birthdate": "birth4"
      }
    ];

    var keep = [
      {
        "username": "user1",
        "birthdate": "birth1"
      },
      {
        "username": "user3",
        "birthdate": "birth3"
      }
    ];

    log(_.difference(_.pluck(users,"username"),_.pluck(keep,"username"))); // works
    log(_.difference(users,keep)); // this is what I want, does not work
有什么想法吗?谢谢

注:另一种方法如下,但不确定效率:

        log( _.filter(users, function(num){
        return (!_.contains(_.pluck(keep,"username"),num.username))
    }) );

这些是对象的数组,只被视为引用(如地址)。因为它们不是相同对象实例的引用(即使它们包含相同的信息),所以它们被认为是完全不同的

\uu0.difference
并没有对数组内容进行深入检查,它只是查看值并确定它们是对象引用

如果你想要这些东西

var users=[{“username”:“user1”,“birthdate”:“birthdate”},{“username”:“user2”,“birthdate”:“birthdate”},{“username”:“user3”,“birthdate”:“birthdate”},{“user4”,“birthdate”:“birthdate”};
var keep=[{“用户名”:“用户1”,“出生日期”:“出生1”},{“用户名”:“用户3”,“出生日期”:“出生3”}];
//如果要比较所有属性
var result=u.reject(用户,u.partial(u.findWhere,keep,u));
日志(“所有属性”,结果);
//如果用户名是标识字段
var keepUsernames=uu.pull(保留“用户名”);
result=\.reject(users,(user)=>\.indexOf(keepUsernames,user.username)>-1);
日志(“用户名”,结果)

非常感谢!