在 javascript 中按对象引用进行哈希处理
Hash by object reference in javascript
>有人需要在javascript中通过对象引用进行哈希处理吗?
也许您想通过 DOM 节点的哈希值或按构造对象的实例或许多其他内容对 ul
的子节点进行分组。
我已经读过这篇文章,在它们稳定之前不想使用弱图。
我能想到的唯一方法是将父项存储在数组中并在那里强制执行引用唯一性,然后按数组中引用的索引进行哈希处理。(例如查找 LI 的所有常见 UL 父项(:
var lis = document.getElementsByTagName('li'); // Get all objects
var parent, key, li;
for (var i=0; i<lis.length; i++ ) { // For every LI
storeItemByParent(lis[i], lis[i].parentNode);
}
var parents = [];
var itemsByParent = {};
function storeItemByParent (item, parent){
var key;
// Does this parent already exist? if so, use that index as the hash key
for (var j=0; j<parents.length; j++) {
if(parents[j] === parent) {
key = j;
break;
}
}
// This is a new parent? If so, track it and use that index as the hash key
if (key == undefined) {
parents.push(parent);
key = parents.length;
}
// Finally! The lis in a hash by parent "id".
itemsByParent[key] = itemsByParent[key] || [];
itemsByParent[key].push(item);
}
有没有更好的方法来存储附加到对象实例的属性或子项或其他东西,而无需将它们添加为对象本身的属性?
你在那里几乎有正确的方法,尽管我会把它很好地包装在一个界面后面,用我自己的add
和find
方法完成。
您可以使用 <array>.indexOf
来简化编码,在所有现代浏览器中都受支持,并在需要时轻松填充。
但是,您的方法有一个缺点:
如果从 DOM 中删除某个元素,则该元素不会被垃圾回收,因为您的数组仍然保留对它的引用。
当然,虽然这不是一个表演障碍,但值得记住。
但是,您也可以采取一种完全不同的方法。 可能不是更好 - 但不同。
请原谅代码中的任何小错误,我正在徒手输入:
function elementDataHash = {};
function setElementData(el, data) {
var hash = el.getAttribute("data-element-hash");
if !(hash) {
// http://stackoverflow.com/questions/6860853/generate-random-string-for-div-id
hash = generateRandomString();
el.setAttribute("data-element-hash", hash);
}
elementDataHash[hash] = data;
}
function getElementData(el) {
var hash = el.getAttribute("data-element-hash");
return elementDataHash[hash];
}
相关文章:
- Steam Web API:I'我不知道该如何处理这个看起来像哈希的url来生成图像
- 听任意DOM修改-对DOM进行哈希处理
- 在IE9中提交表单之前对密码进行哈希处理
- 对电子邮件(或用户名)进行哈希处理以存储在redis哈希桶中
- 使用带有哈希标签的链接处理类似Facebook的按钮信息(标题和图像)
- 处理Ember.js默认路由之外的页面URL哈希参数
- 如何处理 Backbone .js应用程序中哈希更改的滚动位置
- 在使用 POST 方法发送密码之前,有没有办法使用 bcrypt 对密码进行哈希处理
- 如何使用加密检查字符串是否已在 Node.js 中进行哈希处理
- 在提交表单之前对客户端进行哈希密码哈希处理的简单方法
- 如何在 ASP.NET 中对图像源 URL 进行哈希处理
- 在jQuery中处理碎片哈希
- 使用Crypto-js对元素内容进行哈希处理
- 在发送到客户端之前,是否应该对表的Id列进行加密/哈希处理
- 如何用Javascript加载页面并对其进行MD5哈希处理,以确保它是我们要查找的页面
- 在 javascript 中按对象引用进行哈希处理
- Angular:如何处理HTML5模式路由和哈希路由
- jQuery Mobile -后续jQuery.show()问题的哈希处理
- 阻止Jquery Mobile处理URL哈希
- 在Java而不是JavaScript上进行MD5哈希处理