Javascript 下划线差异不适用于JSON对象数组
我有一个要使用u.difference筛选的用户列表。但它并不致力于比较这些对象。只有当我只比较用户名时,它才起作用。以下是代码片段:Javascript 下划线差异不适用于JSON对象数组,javascript,json,underscore.js,difference,Javascript,Json,Underscore.js,Difference,我有一个要使用u.difference筛选的用户列表。但它并不致力于比较这些对象。只有当我只比较用户名时,它才起作用。以下是代码片段: var users = [ { "username": "user1", "birthdate": "birth1" }, { "username": "user2", "birthdate": "birth2" }, {
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);
日志(“用户名”,结果)代码>
非常感谢!