2014-03-01 43 views
0

我想定义我所了解的是一个关联数组(或者可能是一个对象),使得我有如下条目: “Bath”= [1,2,5,5,13,​​21] “London” = [4,7,13,25]如何定义关联数组?

我已经试过如下:

var xref = new Object; 
xref = []; 
obj3 = { 
     offices: [] 
     }; 
xref.push(obj3); 

然后通过我的数据循环与

xref[name].offices.push(number); 

但我得到“类型错误:外部参照[名]未定义“。我究竟做错了什么 ?

var xref = {}; 
xref.obj3 = obj3; 
var name = 'obj3'; 
xref[name].offices.push(number); 
+0

什么是'name'在你的榜样:

现在我可以做这样的事情访问交叉引用列表?此外,你应该使用一个对象,而不是一个数组。用'new Object'初始化'xref',然后在下一行中赋值'[]'是没有意义的。我建议阅读[MDN - 使用对象](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Working_with_Objects)。 –

+0

'var xref = new Object; xref = [];'和'var xref = new Object();是一样的。 xref = new Array();'。您不能在JavaScript数组中使用命名键。删除'[]'声明。 – h2ooooooo

回答

0

我意识到我真正想要的是一个二维数组,第一维是关键(即“BATH”,“伦敦”),第二个是交叉引用列表(即1,2 ,5,5,13,​​21) - 所以我不需要了解Object路由呢!其他的建议可能会起作用,并且会变得更“纯”,但是对于我的老式大脑来说,二维数组更容易处理。

所以我做了以下内容:

var xref = []; 
// go through source arrays 
for (i = 0; i < offices.length; i++) { 
    for (j = 0; j < offices[i].rel.length; j++) { 
    // Check if town already exists, if not create array, then push index 
    if (xref[offices[i].rel[j].town] === undefined) { 
     xref[offices[i].rel[j].town] = []; 
     alert('undefined so created '+offices[i].rel[j].town); 
     }; 
    xref[offices[i].rel[j].town].push(i); // Add index to town list 
    }; 
    }; 

我从阅读其他职位相信我会有问题,如果有任何的办公室[I]的.rel [J] .town'被设置为未定义的,但数据不具备这种可能性。

townlist = ""; 
for (i = 0; i < xref["BATH"].length; i++) { 
    townlist += offices[xref["BATH"][i]].name+' '; 
    }; 
alert(townlist); 
1

像你做OBJ 3使用对象。

+0

我发布后不久就意识到自己的错误。 –

0
var obj = { 
    arr : [], 
} 

var name = "vinoth"; 
obj.arr.push(name); 
console.log(obj.arr.length); 
console.log(obj.arr[0]); 

obj.prop = "Vijay"; 
console.log(obj.prop); 

您可以使用object literal