如何通过JavaScript中的索引引用数组项?

如何通过JavaScript中的索引引用数组项?,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我有一个JavaScript数组: Fruit > Banana > Colour > Yellow > Size > Large > Cost > $3.50 > Apple > Colour > Green > Size > Small > Cost > $0.

我有一个JavaScript数组:

Fruit > Banana > Colour > Yellow
               > Size   > Large
               > Cost   > $3.50
      > Apple  > Colour > Green
               > Size   > Small
               > Cost   > $0.42
我可以使用以下方法获取值:

alert(Fruit['Banana']['Colour']);
如何使用索引获得相同的值

alert(Fruit[0][0]);
谢谢大家,你们引领我走向正确的方向,以下是我所追求的解决方案:

for (var a in Fruit) {
    //var a gives me "Banana" and "Apple"
    for (var b in Fruit[a]){
        //var b gives me "Colour", "Size" and "Cost"
        //Fruit[a][b] gives me the values
    }
}

我有点困惑,因为你似乎已经回答了你自己的问题。我也不知道您的阵列是如何设置的。但如果您看看这个示例,您可以看到它在这里工作:

这假设顶级数组包含您的水果类型,而第二级数组包含每个水果类型的属性

更新

来自和:

在JavaScript 1.0中,您可以引用 对象的属性(按其属性) 名称或按其顺序索引。在里面 但是,JavaScript 1.1或更高版本,如果 最初,您可以通过其属性定义属性 名称,您必须始终通过 它的名称,如果您最初定义 索引的属性,您必须 总是通过索引来引用它

因此,问题是您需要声明一个关联数组,而不是基于索引/顺序的数组。我能想到的唯一解决方案是使用(丑陋的)
for
循环。下面是一些未经测试的伪代码:

function getItemByIndex(index, array) {
    var counter = 0;

    for (item in array)
    {
        if (counter == index)
        {
            return item;
        }

        counter++;
    }
}

我有点困惑,因为你似乎已经回答了你自己的问题。我也不知道您的阵列是如何设置的。但如果您看看这个示例,您可以看到它在这里工作:

这假设顶级数组包含您的水果类型,而第二级数组包含每个水果类型的属性

更新

来自和:

在JavaScript 1.0中,您可以引用 对象的属性(按其属性) 名称或按其顺序索引。在里面 但是,JavaScript 1.1或更高版本,如果 最初,您可以通过其属性定义属性 名称,您必须始终通过 它的名称,如果您最初定义 索引的属性,您必须 总是通过索引来引用它

因此,问题是您需要声明一个关联数组,而不是基于索引/顺序的数组。我能想到的唯一解决方案是使用(丑陋的)
for
循环。下面是一些未经测试的伪代码:

function getItemByIndex(index, array) {
    var counter = 0;

    for (item in array)
    {
        if (counter == index)
        {
            return item;
        }

        counter++;
    }
}

除非您将字符串索引复制到数值索引,否则您不能
,但它们将是数组中的新元素

除非您将字符串索引复制到数值索引,否则您不能,但它们将是数组中的新元素

您不指示如何创建数组或分配这些值,但听起来好像你不知道JavaScript数组和JavaScript对象之间的区别

对象具有键为字符串的属性,但不能使用索引整数访问这些属性,只能通过键访问

数组是一种特殊类型的对象,它提供数组功能,如
length
属性和一些方法,如
sort()
,等等。数组属性通常分配数字索引,而
length
属性基于这些数字索引属性,但由于数组仍然是对象,所以也可以使用字符串键指定属性。如果您说
myArray['banana']=..
,则无法通过索引号访问“banana”属性

如果您想要像“banana”这样的键,那么根本不应该使用数组,只需使用普通对象即可


有很多文章对此进行了更深入的解释;这里是我随机找到的一个:

您没有指明如何创建数组或分配这些值,但听起来好像您不知道JavaScript数组和JavaScript对象之间的区别

对象具有键为字符串的属性,但不能使用索引整数访问这些属性,只能通过键访问

数组是一种特殊类型的对象,它提供数组功能,如
length
属性和一些方法,如
sort()
,等等。数组属性通常分配数字索引,而
length
属性基于这些数字索引属性,但由于数组仍然是对象,所以也可以使用字符串键指定属性。如果您说
myArray['banana']=..
,则无法通过索引号访问“banana”属性

如果您想要像“banana”这样的键,那么根本不应该使用数组,只需使用普通对象即可


有很多文章对此进行了更深入的解释;这里是我随机找到的一个:

看起来你把JavaScript和所有对象都是对象这一事实混淆了。请注意,普通对象(例如,您提到的“水果”对象)没有属性(键)的内在顺序,而数组对象有(由于积分索引的自然顺序)。实际上,数组只是一个具有特殊“length”属性的对象,该属性存储最后一个整数索引(从零开始)加上一

任何对象的属性都将以任意(如随机)顺序迭代:

var obj={a:'yes',b:'Bee',c:'See',d:'Dee'};
用于(obj中的var prop){
警报(prop+'='+obj[prop]);//不保证订单。
}
严格地说,即使是数组也不能保证使用
for in
循环按自然顺序迭代;然而,大多数JavaScript解释器无论如何都会这样做。(值得注意的是,IE8按照索引分配的顺序而不是自然顺序进行迭代。)这就是为什么您应该始终在普通的“for”循环中使用索引来迭代数组

var arr=['a','b','c','d','e','f'];

对于(var i=0;i,您似乎将JavaScript与所有对象都是的事实相混淆。请注意,普通对象(例如您提到的“水果”对象)没有属性(键)的内在顺序,而数组对象有(由于积分索引的自然顺序).从本质上讲,数组只是一个具有特殊“长度”属性的对象