2017-09-15 12 views
-3
var array1 = [ 
    { 
    "_id" : ObjectId("5972dbe185c5a00906fbefa7"), 
    "name" : "user1", 
    "score" : 2.0 
    }, 
    { 
    "_id" : ObjectId("59994cf90b79bc4e8233ed1d"), 
    "name" : "user2", 
    "score" : 1.5 
    }, 
    { 
    "_id" : ObjectId("59880bbaa329573db1180acd"), 
    "name" : "user3", 
    "score" : 0.5 
    }, 
    { 
    "_id" : ObjectId("5972fa945ad42b149da788b2"), 
    "name" : "user4", 
    "score" : 3.0 
    } 
] 

var array2 = [ 
    { 
    "_id" : ObjectId("5972dbe185c5a00906fbefa7"), 
    "name" : "user1", 
    "score" : 1.5 
    }, 
    { 
    "_id" : ObjectId("599d2d8fe9feeb290c699535"), 
    "name" : "user5", 
    "score" : 1.5 
    }, 
    { 
    "_id" : ObjectId("59880bbaa329573db1180acd"), 
    "name" : "user3", 
    "score" : 3.0 
    }, 
    { 
    "_id" : ObjectId("8072fa945ad42b149da799cc"), 
    "name" : "user8", 
    "score" : 2.5 
    } 
] 

array3 = _.unionWith(array1, array2, _.isEqual); 

それらの値を比較し、それらのいずれかを選びます._unionWith関数ですが、返されるオブジェクトのscoreプロパティに別の重複オブジェクトスコアを追加して重複オブジェクトの1つを選択して返しませんでした。 これをより効率的に行うにはどうすればいいですか?あなたが行うことができますループを使用して感謝オブジェクトの配列で重複するものを見つけ、

+1

あなたのコードを投稿することは良い第一歩になります。 – TheCog

+0

ようこそ。何がどのように求められるかを確認するには、[help]をご覧ください。ヒント:手間とコード – mplungjan

+0

ああ申し訳ありません!これが私の最初の質問であるので、私の質問の説明は理解するのに十分だと思った。 –

答えて

0

オブジェクトへの参照としてハッシュテーブルを取り、配列を縮小することができます。

var array1 = [{ _id: "5972dbe185c5a00906fbefa7", name: "user1", score: 2.0 }, { _id: "59994cf90b79bc4e8233ed1d", name: "user2", score: 1.5 }, { _id: "59880bbaa329573db1180acd", name: "user3", score: 0.5 }, { _id: "5972fa945ad42b149da788b2", name: "user4", score: 3.0 }], 
 
    array2 = [{ _id: "5972dbe185c5a00906fbefa7", name: "user1", score: 1.5 }, { _id: "599d2d8fe9feeb290c699535", name: "user5", score: 1.5 }, { _id: "59880bbaa329573db1180acd", name: "user3", score: 3.0 }, { _id: "8072fa945ad42b149da799cc", name: "user8", score: 2.5 }], 
 
    hash = Object.create(null), 
 
    result = [array1, array2].reduce(function (r, a) { 
 
     a.forEach(function (o) { 
 
      if (!hash[o._id]) { 
 
       hash[o._id] = o; 
 
       r.push(hash[o._id]); 
 
       return; 
 
      } 
 
      hash[o._id].score += o.score; 
 
     }); 
 
     return r; 
 
    }, []); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

0

はこのような何か:

var array1 = [ 
 
    { 
 
    "_id" : "5972dbe185c5a00906fbefa7", 
 
    "name" : "user1", 
 
    "score" : 2.0 
 
    }, 
 
    { 
 
    "_id" : "59994cf90b79bc4e8233ed1d", 
 
    "name" : "user2", 
 
    "score" : 1.5 
 
    }, 
 
    { 
 
    "_id" : "59880bbaa329573db1180acd", 
 
    "name" : "user3", 
 
    "score" : 0.5 
 
    }, 
 
    { 
 
    "_id" : "5972fa945ad42b149da788b2", 
 
    "name" : "user4", 
 
    "score" : 3.0 
 
    } 
 
] 
 

 
var array2 = [ 
 
    { 
 
    "_id" : "5972dbe185c5a00906fbefa7", 
 
    "name" : "user1", 
 
    "score" : 1.5 
 
    }, 
 
    { 
 
    "_id" : "599d2d8fe9feeb290c699535", 
 
    "name" : "user5", 
 
    "score" : 1.5 
 
    }, 
 
    { 
 
    "_id" : "59880bbaa329573db1180acd", 
 
    "name" : "user3", 
 
    "score" : 3.0 
 
    }, 
 
    { 
 
    "_id" : "8072fa945ad42b149da799cc", 
 
    "name" : "user8", 
 
    "score" : 2.5 
 
    } 
 
] 
 

 

 

 
array1.forEach((item)=>{ 
 
    array2.forEach((item2) => { 
 
    if(item._id === item2._id){ 
 
     item2.score = item2.score +item.score;//add score from first array dup to second 
 
    } 
 
    
 
    }); 
 
    }); 
 
console.log(array2)

は今、配列1

ノートのすべての重複のスコアをarray2の持っている:私はそれを得るためのObjectIdを削除しましたスニペットで作業する

関連する問題