引用Javascript中的索引集合
Reference indexed collection in Javascript
我搜索一种方法,在Javascript中获得一个通过引用进行索引的对象。
类似于:
var myRefMap = new RefMap();
var a = [{}, [], function () {}];
myRefMap.set(a[0], true);
myRefMap.set(a[1], { hello: 'world' });
myRefMap.set(a[2], 42);
myRefMap.has(a[0]); // true
myRefMap.has(a[1]); // true
myRefMap.has(a[2]); // true
myRefMap.has({}); // false
myRefMap.has([]); // false
myRefMap.has(function () {}); // false
我需要这个对象来优化和避免在循环引用中浏览树时进行实际的大量数组搜索。
谢谢,
如果所有存储的值都是对象,那么实现这一点的一种基本方法是:
(function () {
var instCount = 0;
self.RefMap = function () {
instCount ++;
var propName = '__RefMap' + instCount + '__';
this.has = function (o) {
return propName in o;
};
this.set = function (o) {
o[propName] = true;
}
this.remove = function (o) {
delete o[propName];
}
}
}());
//then use it like
var myRefMap = new RefMap();
编辑:数组和函数也是对象。您可以使用Object.defineProperty来隐藏"标记"属性,具体取决于您所针对的浏览器。
如果您的代码表示希望最后一个条件求值为true,那么只需使用对象和'in'指令就可以正常工作。
var mystuff = {};
var a = [{}, [], function () {}];
mystuff[a[0]] = true;
mystuff[a[1]] = {hello:'world'};
mystuff[a[2]] = 42;
(a[0] in mystuff); // true
({} in mystuff); // true
(a[1] in mystuff); // true
(a[2] in mystuff); // true
然而,如果您希望(mystuff中的{})评估为false,那就大不相同了。
相关文章:
- 名称输入的索引
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- 在jQuery中获取表的行索引
- 测试索引值是否等于某个数字的倍数
- 使用它更新集合中的嵌套数组's索引
- 引用Javascript中的索引集合
- 主干-在对集合进行迭代时将索引传递到视图中
- React:使用索引变量更新嵌套集合
- BackboneJS重新排列集合中模型的最佳方式,同时为每个模型维护0索引的有序属性
- 在 Meteor 中获取集合索引的列表
- 使用猫鼬查询 mongo 中集合的命名文本索引
- 正在将模型添加到具有索引的集合中
- JQuery集合<选择>属性值的索引
- 如何通过fetch获取添加到Backbone集合的项目的索引
- jQuery将子项插入到集合索引处的元素中
- 获取基于行索引数组的jQuery行集合
- struts2形式绑定参数到集合而不使用索引
- MongoDb -按列选择集合和索引
- 索引页排序集合的附加参数
- 在从Backbone集合中过滤模型时维护索引