2017-04-21 3 views
0

_differenceを使用してフィルタリングするユーザーのリストがあります。しかし、オブジェクトの比較には取り組んでいません。私はユーザー名だけを比較すれば動作します。コードスニペットは次のとおりです。JSONオブジェクトの配列にアンダースコアの差がない

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 

おかげで - C.

注:それはfollowssようであることの別の方法が、効率わからない:

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

答えて

2

これらは、(アドレスなど)のみの参照と見られているオブジェクトの配列、あります。同じオブジェクトインスタンスの参照ではないため(同じ情報が含まれていても)、それらはすべて異なるとみなされます。

_.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" }]; 
 

 
// if you want to compare all the properties 
 
var result = _.reject(users, _.partial(_.findWhere, keep, _)); 
 

 
console.log("All attributes", result); 
 

 
// if the username is the identifying field 
 
var keepUsernames = _.pluck(keep, 'username'); 
 
result = _.reject(users, (user) => _.indexOf(keepUsernames, user.username) > -1); 
 

 
console.log("usernames", result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore-min.js"></script>
たい場合

+0

どうもありがとうございました! – Christian68

+0

@ Christian68これがあなたを助けてくれたら、あなたはそれを解決したとしてマークするためにそれを受け入れるべきです。 –

関連する問題