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