您可以使用下劃線的方式做到這一點:
// collectionUnion(*arrays, iteratee)
function collectionUnion() {
var args = Array.prototype.slice.call(arguments);
var it = args.pop();
return _.uniq(_.flatten(args, true), it);
}
它只是原有功能_.union(*arrays)
的改良效果,添加iteratee工作集合(對象的數組)。
這裏如何使用它:
var result = collectionUnion(a, b, c, function (item) {
return item.id;
});
這是剛剛與陣列工作在原有的功能,看起來像這樣:
_.union = function() {
return _.uniq(flatten(arguments, true, true));
};
而且在獎金一個完整的例子:
// collectionUnion(*arrays, iteratee)
function collectionUnion() {
var args = Array.prototype.slice.call(arguments);
var it = args.pop();
return _.uniq(_.flatten(args, true), it);
}
var a = [{id: 0}, {id: 1}, {id: 2}];
var b = [{id: 2}, {id: 3}];
var c = [{id: 0}, {id: 1}, {id: 2}];
var result = collectionUnion(a, b, c, function (item) {
return item.id;
});
console.log(result); // [ { id: 0 }, { id: 1 }, { id: 2 }, { id: 3 } ]
所以,你需要的是一個深刻的合併和擴展? https://gist.github.com/1868955 http://stackoverflow.com/questions/7549574/merge-js-objects-without-overwriting http://stackoverflow.com/questions/896043/how-cani-i-合併2-javascript-objects-populating-the-properties-in-one-if-they -d – jcolebrand
http://phrogz.net/JS/ArraySetMath.js – Phrogz
我知道這不是你的問題,但是你有沒有考慮使用獨特的gameIds並使用key:value對象來進行收藏? – cbayram