如何实现这样的关联数组?

时间:2010-01-13 05:58:31

标签: javascript jquery arrays

arr[key] = value;

其中key是jQuery对象,value是数组。

6 个答案:

答案 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通过aa.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对象都是一个关联数组,这是一个用语言构建的属性,你不需要任何特殊的东西,只需像那样使用它