なぜ、この結果が0になるのですか?実際のサイズはどのように見えますか?あなたはリテラル配列の長さを見つける方法は?
array["foo"] = "bar"
を行う際
var array = [];
array["foo"] = "bar";
array["bar"] = "foo";
document.write(array.length);
なぜ、この結果が0になるのですか?実際のサイズはどのように見えますか?あなたはリテラル配列の長さを見つける方法は?
array["foo"] = "bar"
を行う際
var array = [];
array["foo"] = "bar";
array["bar"] = "foo";
document.write(array.length);
それは、プロパティで構成されているオブジェクトであり、そしてあなたがこのような何かを行う必要があります(連想配列、またはハッシュテーブルに概念的に類似)のキー/値ペアの形取るので:
をObject.size = function(obj) {
var size = 0, key;
for (key in obj) {
if (obj.hasOwnProperty(key)) size++;
}
return size;
};
var array = [];
array["foo"] = "bar";
array["bar"] = "foo";
var size = Object.size(array);
は、基本的には、それだけでオブジェクトである配列、にいくつかのより多くの属性を追加します。 javascriptでは、array.fooとarray ['foo']は同じ意味を持ちます。
感謝を行きます。しかし、それは質問に答えない? – Mantar
オブジェクトに変換しません。配列*は*オブジェクトなので、任意のプロパティを設定することができます。 – lonesomeday
たぶん私は(私のjavascriptのは、それが何であるかではありません)ナイーブされていますが、それはこのようなものであってはならない。あなたがいずれかを入れていないので、実際のサイズが0である
var array = [];
array[0] = "bar";
array[1] = "foo";
document.write(array.length);
項目を配列オブジェクトに変換する - これは、メソッド(プッシュなど)またはインデックス付きプロパティ(またはコンストラクタ)に値を代入する方法のいずれかでのみ行うことができます。
このように、あなたは配列ではなくオブジェクトを扱います。オブジェクト(質問自体)のプロパティを数える方法は、How to efficiently count the number of keys/properties of an object in JavaScript?を参照してください。
はあなたがいないことに新しい要素を与え、アレイ上のプロパティを設定しています。配列は他のJavascriptオブジェクトと同様に、任意のプロパティを受け取ることができます。例えば:
var foo = [];
foo.bar = 'foobar';
console.log(foo.bar); // outputs 'foobar'
console.log(foo); // outputs [] -- empty array
、配列に項目を追加Array.push
を使用するには:
var foo = [];
foo.push('foobar');
console.log(foo); // outputs ['foobar']
キー=>値のペアをしたい場合は、代わりにオブジェクトを使用します。
var foo = {};
foo['bar'] = 'foobar';
console.log(foo); // outputs {bar: 'foobar'}
まずオフarray
の項目数が0であるため、長さは0です。
この構文array["foo"] = "bar"
foo
という値を持つプロパティを作成しています。値はbar
です。長さはまだ0であるあなたは配列には何も追加されていないことから、あなたはちょうどここアレイ
の作業バージョンに新しいプロパティを設定しました:array.length = 4
しかしprops = 7
の全てであることをhttp://jsfiddle.net/VyjJD/3/
var array = [];
array["foo"] = "bar";
array["bar"] = "foo";
array.bin = function() { return "bin"; };
array[0] = "bar";
array[1] = "foo";
array[2] = "bin";
array[3] = "bat";
var props = 0;
for (key in array)
props++;
document.write(array.length + "<br />"
+ props + "<br />"
+ (array.foo == array["foo"]) + "<br />"
+ array.bar + "<br />"
+ array.bin());
お知らせ配列内の項目の数とプロパティを取得します。
+100。素晴らしい説明。ありがとうございました。 – Radek
Object.keys(配列).LENGTH
はこれを参照してください。https://stackoverflow.com/a/13802999/1488217
クレジットはそれを一掃するためにイアンに
また、Object.prototype.size = function()... そして、var size = array.size() –
...または普通の関数として使うことができます。ちょうど ' getSize(var); ' – karim79
JSには連想配列はありません。これはオブジェクトであり、そのプロパティにアクセスするための代替構文です。 'array [" foo "]'の代わりに 'array.foo'と書くこともできます。長さのプロパティは機能しません。彼は配列オブジェクトにプロパティを設定し、配列にアイテムを追加しません。 – DanMan