假设我创建了这个数组:
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
答案 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
但这似乎很不切实际,我从来没有在任何我工作的项目中看到过类似的东西