arr[key] = value;
其中key
是jQuery对象,value
是数组。
答案 0 :(得分:4)
JavaScript中并不存在关联数组。但是,您可以使用JavaScript对象实现类似的功能:
// Create object
var myObject = {
key: value,
helloText: "Hello World!"
};
// Access object in some statement via:
myObject.helloText
// ...or:
myObject["helloText"]
要将对象用作键,您必须执行以下操作:
var a = {
helloText: "Hello World!"
};
var b = {};
b[a] = "Testing";
alert(b[a]); // Returns "Testing" (at least, in Safari 4.0.4)
使用对象作为键听起来有点奇怪。你确定需要这样做吗?
<强>更新强>
您无法实际使用对象作为JavaScript中的键。上述代码似乎有效的原因是,在b[a] = "Testing";
语句中,JavaScript通过a
将a.toString()
转换为字符串,结果为"[object Object]"
,并使用此< em> string 作为关键。所以我们的陈述实际上是b["[object Object]"] = "Testing";
,我们的警告声明与alert(b["[object Object]"]);
完全相同。
感谢CMS在评论中指出这一点!
更新2:
Tim Down指出他的JavaScript库jshashtable
允许您将对象用作键。
答案 1 :(得分:2)
您可以使用jshashtable,它允许任何JavaScript对象作为密钥。
答案 2 :(得分:1)
您不能将对象用作键,并且关联数组不是它们在Javascript中看起来的那样,因为您正在做的就是在数组对象上设置属性,当您通过.length
本地循环时不考虑您设置的手动定义的属性。
我建议将元素和数组存储在对象文字内部,所有这些都在数组内部。例如:
var list = [
{
el:document.body,
arr:[1,2]
}
];
for ( var i = 0, l = list.length; i<l; ++i ) {
alert( list[i]['el'] )
alert( list[i]['arr'][0] )
}
// add elements to the array
list.push({
el:document.body.firstChild,
arr:[3,4]
})
正如kprime在他的回答中提到的,如果你使用Javascript,最好使用.data()
。
if ( !$(el).data('key') ) {
$(el).data('key', [2,3,4] );
}
答案 3 :(得分:1)
在这里猜测,但似乎你试图将一些(任意)数据与jQuery对象(可能是一个元素)相关联。在这种情况下,为什么不使用data ()
方法?
$('#el').data (value);
答案 4 :(得分:0)
我建议为要放入关联容器(JS中的对象)的每个元素分配一个唯一的ID,并使用该ID作为键:
var idCounter = 0;
var container = { };
function storeValue(element, value) {
if (!element.getAttribute('id')) {
element.setAttribute('id', makeID());
}
var id = element.getAttribute('id');
container[id] = value;
}
function makeID() {
return 'unique-id-' + idCounter++;
}
编辑:此解决方案假定jQuery不可用。如果是,请使用data('key', value)
。
答案 5 :(得分:-1)
每个javascript对象都是一个关联数组,这是一个用语言构建的属性,你不需要任何特殊的东西,只需像那样使用它