对象_array
和_hash
引用相同的对象,因此内存开销仅限于数组和散列中的引用,而不是对象的完整副本。
小提琴:http: //jsfiddle.net/vbjWK/
function UniqueArray(array, key) {
this._array = [];
this._hash = {};
this._key = key;
this.concat(array);
}
UniqueArray.prototype.concat = function(array) {
var i, len;
for (i = 0, len = array.length; i < len; i++) {
this.push(array[i]);
}
}
UniqueArray.prototype.push = function(obj) {
if (!this._hash[obj[this._key]]) {
this._hash[obj[this._key]] = obj;
this._array.push(obj);
}
}
测试:
// Testing testing
var first = [
{"value": "1", "id": "123"},
{"value": "2", "id": "124"},
{"value": "3", "id": "125"}
];
var second = [
{"value": "1", "id": "123"},
{"value": "2", "id": "234"},
{"value": "3", "id": "235"}
]
var ua = new UniqueArray(first, "id");
ua.concat(second);
console.log(ua._array);