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; ドキュメントを使用してください

于 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 ];
}

注意すべき点の1つは、これがフルーツのすべてのキーと、それが継承するすべてのオブジェクト(私の例では唯一のobject.prototype)をループすることです。注意が必要な場合は、hasOwnPropertyメソッドを使用して、プロパティがフルーツオブジェクトに存在し、そのプロトタイプには存在しないことを確認できます。

for( var item in fruits ){

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

探しているのはJavaScriptオブジェクトです。フルーツ変数をオブジェクトリテラルとして宣言すると、必要なアクションを実行できます。

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

次に、次のようなalert(fruits["A"])ことを行うと、必要に応じて「Apple」というアラートメッセージが表示されます。ただし、JavaScriptオブジェクトにはlengthプロパティがありませんが、 fruitsObject.keys(fruits)変数のキーの配列を返すようにすると、そのlengthプロパティにアクセスできます。

于 2013-02-18T18:45:47.830 に答える
0

このように配列を宣言することはできません。新しいキーワードを使用して配列を宣言する必要があります

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 に答える