2

2 つの通常配列を 1 つの連想配列にバインドしたいと考えています。最初の値はキーで、2 番目の値は要素です。

var array1=new Array("key1","Key2","Key3");
var array2=new Array("Value1","Value2","Value3");

var associative_array=new Array();
for(var i=0;i<3;i++){

associative_array[array1[i]]=array2[i];
}

しかし、新しい連想配列の長さを取得しようとすると、空であることに気付きました:

alert(associative_array.length);//always 0

何が間違っていますか?事前にサンクス。

4

3 に答える 3

6

Javascript では、連想配列にオブジェクトを使用します。これを書き直す方法はたくさんありますが、例を使用すると、「new Array()」を「new Object()」に置き換えるだけです。

var array1=new Array("key1","Key2","Key3");
var array2=new Array("Value1","Value2","Value3");

var associative_array=new Object();
for(var i=0;i<3;i++){
  associative_array[array1[i]]=array2[i];
}

オブジェクトのサイズを取得するには、何かを実装する必要があります。以下は関数またはメソッドの一部である必要がありますが、アイデアを説明する必要があります。

var o_size = 0;
for (key in associative_array) {
  o_size++;
}
alert(o_size);
于 2012-04-24T02:32:34.987 に答える
3

私がそれをする方法:

function createAssociativeArray(arr1, arr2) {
    var arr = {};
    for(var i = 0, ii = arr1.length; i<ii; i++) {
        arr[arr1[i]] = arr2[i];
    }
    return arr;
}

var array1 = ["key1", "Key2", "Key3"];
var array2 = ["Value1", "Value2", "Value3"];
var associativeArray = createAssociativeArray(array1, array2);

これは (メソッドとは異なり)、プロパティを持たないオブジェクトを返します。これは、length各値がインデックスではなくプロパティとして扱われるためです。オブジェクトのプロパティの長さをどうしても取得する必要がある場合は、次のようにすることができます。

function getObjectPropertiesLength(obj) {
    var propNum = 0;
    for(prop in obj) {
        if(obj.hasOwnProperty(prop)) propNum++;
    }
    return propNum;
}

var values = getObjectPropertiesLength(associativeArray);

関数をオブジェクトに追加すると、これらはオブジェクトのプロパティとして扱われるため、オブジェクトのプロパティの長さに影響することに注意してください。

あなたの方法は何をしますか:

メソッドが失敗する理由は、プロパティを Array オブジェクトに追加しているためです。はい、配列は技術的には Javascript のオブジェクトです。つまり、配列にプロパティを割り当てることができます。ただし、これは意図したとおりに配列を使用していないため、予期しない結果になる可能性があります。これらの結果の 1 つは、length値が突然機能しなくなることです。

これは、Array オブジェクトがそのプロパティに数値でインデックスを付けることを想定しているためです。文字列を持つオブジェクトにプロパティを割り当てる場合、配列の長さを返す関数はそのプロパティを効果的に認識できないため、配列の長さに寄与しません。

于 2012-04-24T02:16:52.420 に答える
1

JavaScript では、連想配列は単なるオブジェクトです。長さのプロパティはありません。実際、Array() を連想配列として使用するのは良い考えではありません。サイズを 3 にハードコーディングすることを除けば、オブジェクトを生成するためのコードは問題ありません。

于 2012-04-24T02:18:51.077 に答える