我有一个允许选择地理区域的网页。 我预计不会超过5000个区域。
每个区域都有一个代码(长度为9个字符)。
我想从DB加载一组区域,让用户编辑它。
如果用户进行了任何更改,我想在某处显示“未保存的更改”消息。 为了做到这一点,我想比较集合的原始版本和当前版本。
是否可以计算此集合的哈希码并仅比较哈希码? 元素顺序并不重要,应予以忽略。
该集合目前以这种方式实施
function AreaHashTable(areaIdentifiers) {
//properties
this.hash = {};
this.addKeys(areaIdentifiers); }
AreaHashTable.prototype.getKeys = function () {
return this.hash; };
AreaHashTable.prototype.hasKey = function (key) {
if (this.getKeys().hasOwnProperty(key)) {
return true;
}
return false; };
AreaHashTable.prototype.addKey = function (gssCode) {
this.hash[gssCode] = gssCode;
};
AreaHashTable.prototype.addKeys = function (areaIdentifiers) {
var i;
for (i = 0; i < areaIdentifiers.length; i++) {
this.addKey(areaIdentifiers[i]);
} };
... etc
}
答案 0 :(得分:2)
您可以迭代字符串集合,生成9个字符的哈希值,通过x-oring每个字符串的字符和相应的哈希字符串字符。这样,您就会收到字符串集合的与订单无关的哈希值。
类似的东西:
var hash = [0,0,0,0,0,0,0,0,0];
for (var strg in strings) {
for(var i=0; i<9; i++) {
hash[i] ^= strg.charAt(i);
}
}
但是,封装数据并保持“已更改”标志可能是潜在问题的另一种解决方案。