2012-02-08 2 views

答えて

2
var idStruttura=2; 
var arrayMarkers={}; // creates a more appropriate object than [] 

arrayMarkers["sede_"+idStruttura] = "ciao"; 
arrayMarkers["sede_"+(++idStruttura)] = "espresso"; 
var len = 0; 
for (var o in arrayMarkers) { 
    if (arrayMarkers.hasOwnProperty(o)) len++; 
} 
arrayMarkers.length=len 
alert(arrayMarkers.length) 

配列は連想配列ではない、これを試してみてくださいは、しかしながら配列オブジェクトはオブジェクトであり、すべてのオブジェクトが連想配列です。配列に項目を割り当てるときに文字列をキーとして使用する場合は、配列として使用していないため、オブジェクトとして使用しています。

配列のlengthプロパティは、配列に格納されているアイテムの数を返します。配列オブジェクトを連想配列としても使用すると、配列を配列として使用する方法には影響しません。

1

配列のjavascript(PHPとは異なります)には、文字キー、数字キーのみを使用することはできません。文字列リテラルをキーとして使用する場合は、オブジェクトを使用してください。

+0

?これは動作しますhttp://jsfiddle.net/Xtmab/ – markzzz

+0

しかし、それはあなたが求めるものではありません。 – mplungjan

1

必要なものは単純なオブジェクトであり、配列ではありません。配列には数値インデックスがあります。

var markers = {}; 
markers['sede_' + id] = 'ciao'; 

{}new Object()と同じで、[]new Array()と同じであることに注意してください。常に元のものを使用してください。どのJS開発者にとっても明らかです。

+0

ええと?これは動作します... http://jsfiddle.net/Xtmab/ – markzzz

+0

はい。 'Array'も' Object'です。これは例えばPHPとは異なります。 'Array'インスタンスの任意のメンバープロパティを設定できますが、' length'プロパティには影響しません。 JavaScriptの 'Arrays'には数値インデックスのものがあることを覚えておいてください。 –

+0

Uhm!だから私は、このオブジェクトをクリアすることはできませんと思う。どうすればそれをクリアすることができますか? – markzzz

2

作成したのは、通常の配列オブジェクトで、sede_...という名前のプロパティが追加されました。 JavaScriptは、PHPのような言語と同じように連想配列を使用しません。配列はプロパティを持つことができるオブジェクトですが、それらのプロパティは数値で配列された配列要素の中にはありません。

var idStruttura=2; 
var arrayMarkers=new Array(); 

// Push an object onto the array having one property: 
arrayMarkers.push({"sede_" + idStruttura : "ciao"}); 

// Or declare it as an object to begin with: 
// This makes more sense.... 
var objMarkers = {}; 
objMarkers['sede_' + id] = 'ciao'; 
+0

なぜこれが機能しますか? http://jsfiddle.net/Xtmab/ – markzzz

+0

@markzzzこれは、その名前の配列オブジェクトにプロパティを追加したために機能します。 'for(i = 0; i

+0

@markzzz追加したプロパティは、配列に関する追加情報を含む 'array.length'プロパティに似ています。 –

3

オブジェクトを格納するときの長さはありません。オブジェクトを意図したとおりに使用する場合に限ります。

DEMO