1

我试图遍历这个数组,但它不返回任何长度。可能吗?

谢谢!

<!DOCTYPE html>
<html>
  <body>
    <button onclick="myFunction()">click</button>
    <script>
      function myFunction()
      {
        var fruits = [];
        fruits["B"] = "Banana";
        fruits["A"] = "Apple";
        fruits["O"] = "Orange";

        delete fruits["A"];

        alert(fruits["A"]); // Alerts "undefined"
        alert(fruits["B"]); // Alerts "Banana"
        alert(fruits.length); // Alerts "0"
      }
    </script>

  </body>
</html>
4

4 回答 4

8

数组只能有数字索引。当您编写时,fruits["B"] = "Banana";您正在为对象分配一个属性(数组是对象),而不是向数组中添加一个项目。

您可以正确使用带有数字索引的数组,也可以使用带有字符串键的对象:

var fruits = [];
fruits.push("Banana");
alert(fruits[0]); // "Banana"

var fruits = {};
fruits["B"] = "Banana";
alert(fruits["B"]); // "Banana"

如果您需要对象的长度,请使用Object.keys(fruits).length; Docs

于 2013-02-18T18:41:40.653 回答
2

看起来您想要一个对象而不是数组,因此您可以按键访问元素:

var fruits = {
    a : 'apple',
    b : 'banana'
};

fruits.a //apple
fruits['b'] //banana

然后你可以按键循环遍历它们:

for( var item in fruits ){
    fruits[ item ];
}

需要注意的一点是,这将循环遍历 fruits 中的所有键以及它继承自的任何对象(在我的示例中,它唯一的 object.prototype)。如果你想小心,你可以使用 hasOwnProperty 方法来确保该属性存在于 fruits 对象上,而不是它的任何原型上:

for( var item in fruits ){

    if( fruits.hasOwnProperty( item ) ){
        fruits[ item ];
    }
}
于 2013-02-18T18:42:45.707 回答
1

您正在寻找的是一个 JavaScript 对象。如果将 fruits 变量声明为对象字面量,则可以执行所需的操作。

var fruits = {};
fruits["B"] = "Banana"; // Can also do this as fruits.B = "Banana";
fruits["A"] = "Apple";
etc.

然后做类似的事情alert(fruits["A"])会给你一个警报消息,上面写着“Apple”,如你所愿。但是,JavaScript 对象没有长度属性,但您可以这样做Object.keys(fruits),这将返回水果变量的键数组,然后您可以访问其长度属性。

于 2013-02-18T18:45:47.830 回答
0

你不能像这样声明数组。你需要使用 new 关键字声明数组

var Fruit=new Array("Banana","Apple","Orange");

那么你可以像这样访问

 alert(Fruit[0]);//Banana
    alert(Fruit[1]);//Apple
    alert(Fruit[2]);/Orange

希望这会奏效

于 2013-02-18T18:52:34.193 回答