我这样做的方式:
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 中的对象,这意味着您可以为它们分配属性。但是,这并没有按照预期的方式使用数组,这可能会产生意想不到的结果。这些结果之一是该length
值将突然失效。
这是因为 Array 对象希望它们的属性用数字索引。如果将属性分配给带有字符串的对象,则返回数组长度的函数实际上无法看到该属性,因此它不会影响数组的长度。