我想将对象作为键存储在数组中,解决方案是什么。
var myTabObj = safari.application.activeBrowserWindow.activeTab;
我想myTabObj
作为键存储在数组中。我认为myTabObj
特定于 safari 浏览器选项卡是独一无二的。
或者
如何在 Safari 扩展开发中设置选项卡特定值。
我想立即解决,请帮助我。例如,我有 3 个参数可以为每个选项卡动态设置什么是解决方案或任何替代解决方案。
提前致谢
我想将对象作为键存储在数组中,解决方案是什么。
var myTabObj = safari.application.activeBrowserWindow.activeTab;
我想myTabObj
作为键存储在数组中。我认为myTabObj
特定于 safari 浏览器选项卡是独一无二的。
或者
如何在 Safari 扩展开发中设置选项卡特定值。
我想立即解决,请帮助我。例如,我有 3 个参数可以为每个选项卡动态设置什么是解决方案或任何替代解决方案。
提前致谢
首先,您应该使用对象(散列)而不是数组。无论如何,您都这样做 - 数组是 Javascript 中的对象(散列)。您可以在 JS 中将数组视为对象(哈希),使用非数字值作为键,但这很麻烦 - 您在对象原型中获得数组函数和 dproperties,例如 arr.length,但它们仅适用于存储在数组对象中的数字键。
示例(进入 Firebug 的 JS 控制台):
>>> a=[]
[]
>>> a[{}] = 42
42
>>> console.dir(a)
[object Object] 42
>>> a.length
0
>>> a[{}]
42
首先我创建一个数组。然后我在表示数组的对象中创建一个带有键“{} 隐式调用 toString”的属性。由于这不是数字键,因此特定于数组的函数会忽略它 - 数组的长度为 0。但是,如最后一行所示,数组实例(与 JS 中的所有内容一样)确实存储了该属性。
第二,对象(哈希)。
键始终是字符串。这就是为什么有些人说您不能将对象用作键的原因——但这不是真的!如果您在 Javascript 中使用非字符串值作为键,则会调用该对象的 toString() 方法。每个对象都有那个方法,因为它是在 Object.prototype.toString 上定义的。但是,如果不覆盖该回退本机方法,您总是会为您拥有的任何对象获得完全相同的字符串。
示例(进入 Firebug 的 JS 控制台):
>>> a={}
Object {}
>>> a[{}] = 1
1
>>> console.dir(a)
[object Object] 1
>>> a[{prop:"text"}] = 1
>>> console.dir(a)
[object Object] 1
因此,您可以使用对象作为键,但您必须确保为您打算使用的所有对象实例定义自己的 toString 函数。这些 toString 函数通常打印类似(“类”)名称加上存储在实例中的(唯一)字符串 ID 值。如果 oyur toString 函数不能保证为不同的对象生成唯一的字符串,则您不能将对象(实例)用作键,当然可以,但显然有点没用,因为您不会有可靠的 1:1映射。
这不是具体的帮助,但我必须承认,我更愿意就语言的工作方式给出这样的一般性建议——此外,为了给出具体的解决方案,我想说的(代码)上下文还不够。无论如何,要将其存储在数组中,只需使用
var arr = [];
arr.push(instance);
然后使用您选择的 JS 库框架的 for 循环或“...each()”函数迭代数组(如果您使用的话)。
您可以使用我的jshashtable使用任意对象作为键来存储值。