0

我有一种情况,我希望构建一个可以通过以下方式访问的数组:

myArray['Foo'].push(myObj);

但我不知道如何从头开始创建它。从我读过的内容来看,我认为以下可能会做到这一点:

var myArray = new Array(new Array());

问题是它只允许我使用整数来引用 myArray[]。如果我忽略此限制并尝试以下操作,则会错误提示它没有 .push():

myArray[i].push(myObj); 

我想这是因为 myArray[i] 返回一个字符串?

所以我的问题是,如何构建一个动态数组,在其中使用字符串引用第一个维度,然后可以在第二个维度上推送和弹出?另外,如果我采用这种方法,我可以使用 push 和 pop 将字符串添加到第一个维度吗?


我之前考虑过这一点,并写了一些我认为可能有效的代码,它确实如此。

var myArray = new Object();

var myObj = new Object();
var myObj2 = new Object();
var myObj3 = new Object();

myObj.name = "Harry";
myObj2.name = "Curly";
myObj3.name = "Moe";

myArray["first"] = new Array()
myArray["first"].push(myObj);
myArray["first"].push(myObj2);
myArray["first"].push(myObj3);

myArray["second"] = new Array()
myArray["second"].push(myObj2);

myArray["third"] = new Array()
myArray["third"].push(myObj3);

iterate(myArray, "first");
iterate(myArray, "second");
iterate(myArray, "third");

function iterate(array, name) {
    for(i = 0, l = myArray[name].length; i < l; i++) {
        console.log(" " + name + ": " + i + " value " + myArray[name][i].name);
    }
}

以上是正确的方法吗?


我确定我在上面遇到了一些术语问题,请告诉我,我会对其进行编辑,使其正确。

4

1 回答 1

2

您所调用myArray的不是数组,而是对象。以下任一项都是可以接受的:

var myObject = {}
var myObject = new Object();

以下所有行都做同样的事情;他们在对象“myObject”中创建一个名为“first”的键并存储一个新的空数组(您可以将其推入其中):

myObject['first'] = new Array();
myObject['first'] = [];
myObject.first = new Array();
myObject.first = [];

现在你可以推入这个数组:

myArray["first"].push("hello");

这是另一种从头开始编写的方法:

var myObject = {
    first: ["hello"]
};

因此,也许现在您的问题的答案变得更加清晰:

如何构建一个动态数组,其中我使用字符串引用第一个维度,然后可以在第二个维度上推送和弹出?

通过使“第一个”或外部维度成为对象而不是数组。

另外,如果我采用这种方法,我可以使用 push 和 pop 将字符串添加到第一个维度吗?

不,但你可以使用

myObject.somewhereNew = [];
于 2013-01-19T05:38:50.937 回答