将标识符放入数组中的对象

时间:2014-03-17 15:53:32

标签: javascript arrays object

假设我创建了这个数组:

var arr = [1, "ikanej", b={name:"Olsi", surname : "Angjellari"}]

有没有办法用标识符引用这个数组的第三个元素?

喜欢这个

arr.b.name  // this doesn't work

而不喜欢这个

arr[2].name // this does but you need to keep track of index.
            // It would be easier to have an identifier

3 个答案:

答案 0 :(得分:1)

您应该创建一个对象而不是数组:

小提琴http://jsfiddle.net/AV36f/1/

<强> JS

var arr = {0:1, 1:"ikanej", b:{name:"Olsi", surname : "Angjellari"}};

$('.body').append(arr.b.name);

答案 1 :(得分:1)

你在那里做的是定义一个数组。每个元素可以是任何类型,但如果要按名称而不是索引号引用,则必须使用其他答案中提到的对象。

原因     var arr = [1, "ikanej", b={name:"Olsi", surname : "Angjellari"}] 没有引发语法错误是因为b={name:"Olsi", surname : "Angjellari"}b定义为全局变量。不要混淆为数组元素定义索引名称的方法。 事实上arr[2] === b

由于数组只是另一个对象,因此您可以在创建后对其进行修改:

var arr = [1, "ikanej", b={name:"Olsi", surname : "Angjellari"}];
arr['b'] = arr[2];

arr['b'] === arr[2] === b; //true
arr.b.name === 'Olsi';

前面的例子只是说明了一个概念并且不实用,所以我仍然建议你使用普通对象:

var arr = { 
    0: 1, 
    1: "ikanej", 
    b: {name: "Olsi", surname: "Angjellari"}
};

答案 2 :(得分:0)

通常,您应该使用数组来存储具有共同点的元素集合(字符串列表,DOM元素列表等)。通常你不需要使用&#34;名称&#34;来访问它们,所以使用索引就可以了。

var workers=[worker1, worker2...];

如果你有一堆没有直接关系的对象(例如,所有对象都是另一个对象的属性),你应该将它们分组在类似地图的对象中。

var worker1= { name: "John Smith", age: 32, email: "js@myCompany.com" };

你的例子似乎是两者的混合,所以你可以&#34;假的&#34;使用对象的数组:

var fakeArr={};
fakeArr[0]=... //fakeArr.0 won't work, identifiers cannot start with digits
fakeArr[1]=...
fakeArr["b"]=... //fakeArr.b will work

但这似乎很不切实际,我从来没有在任何我工作的项目中看到过类似的东西