【发布时间】:2010-01-13 05:58:30
【问题描述】:
arr[key] = value;
key 是一个 jQuery 对象,value 是一个数组。
【问题讨论】:
标签: javascript jquery arrays
arr[key] = value;
key 是一个 jQuery 对象,value 是一个数组。
【问题讨论】:
标签: javascript jquery arrays
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.toString() 将 a 转换为字符串,从而产生 "[object Object]",并使用此 字符串 作为钥匙。所以我们的声明其实是b["[object Object]"] = "Testing";,而我们的alert声明和alert(b["[object Object]"]);是一模一样的。
感谢CMS 在 cmets 中指出这一点!
更新 2:
Tim Down 指出他的 JavaScript 库 jshashtable 允许您使用对象作为键。
【讨论】:
String,在该示例中b 以一个名为"[object Object]" 的属性结尾。这是应用到a 的toString 操作的结果,因此您不能真正添加更多对象(它们只会更改该属性值)。试试alert(b["[object Object]"]);,它也会显示"Testing"。
您可以使用jshashtable,它允许任何 JavaScript 对象作为键。
【讨论】:
只是在这里猜测,但您似乎正在尝试将一些(任意)数据与 jQuery 对象(可能是一个元素)相关联。既然如此,何不使用data ()方法呢?
$('#el').data (value);
【讨论】:
key 据说是一个 DOM 元素,据我所知,这个问题没有被 jquery 标记。这就是让我们走上“错误”/更麻烦的轨道的原因。
您不能将对象用作键,并且关联数组不是它们在 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] );
}
【讨论】:
我建议为要放入关联容器(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)。
【讨论】:
每个 javascript 对象都是一个关联数组,这是语言中构建的属性,你不需要任何特殊的东西,就这样使用它
【讨论】: