如何以数字方式访问Javascript对象的成员?

时间:2012-05-28 01:15:06

标签: javascript arrays json object

比方说,我有以下Javascript对象:

var Object = {
   Person_A: { name: 'James', age: 40, country: 'Spain' }, 
   Person_B : { name: 'Smith', age: 50, country: 'France' } 
}

我想知道对象Object中有多少属性,并以数字方式访问这些属性,例如通过Object[n]

到现在为止(我不使用Javascript对象,但是在使用AJAX时我使用JSON作为返回格式)我不知道Javascript对象没有length方法,并且可以不能以数字方式访问。

我尝试将Javascript对象转换为在进行AJAX调用时返回的相同类型的JSON(JSON作为具有长度方法的对象返回,并且在数字上可访问 - 只是读取另一个线程,也许我错了 - 现在仔细检查)使用JSON.parse(JSON.stringify(Object)),但这只是返回相同的确切对象。

所以,我的问题是,采用像示例这样的对象的最有效方法是什么,并使其可以数字访问并使用length方法。

非常感谢任何帮助(请询问您是否需要澄清我的问题)。

感谢。

3 个答案:

答案 0 :(得分:5)

这不能用意义来完成。 JavaScript对象的属性没有固有的顺序 1

length属性是Arrays的特殊成员。 (数组只是具有特定[[原型]]的对象,并且理解如何神奇地更新length - 并定义了一些其他内部规则 - 就是这样!)


评论更新:

如果需要索引,请使用数组:

var people = [
   { id: "Person_A", data: { name: 'James', age: 40, country: 'Spain' } },
   { id: "Person_B", data: { name: 'Smith', age: 50, country: 'France' } }
]

people[0].id // "Person_A"

1 JSON“仅在序列化为文本时才有订单”,但实现(包括将其转换为JavaScript对象的实现)在没有关于订单的访问[或假设]的情况下工作;根据JSON标准,没有针对属性的订单保证。仅仅因为对象中的属性“看起来”在JSON(或JS对象文字)中排序,并不意味着订单。

答案 1 :(得分:2)

如果要用数字访问的数组完全替换该对象,可以先循环遍历它以构建新数组:

var newArray=new array();
for(i in object){
    array.push(i);
}

您现在可以以数字方式访问该数组

答案 2 :(得分:1)

function numericIndices(obj) {
    var i=0, x;
    for( x in obj) {
        obj[i] = obj[x];
        i++;
    }
    // next line is OPTIONAL:
    obj.length = i;
}

给定一个对象,这将向该对象添加数字索引。因此,在通过该函数运行之后,该对象将具有字符串键和数字键。如果您也有可选行,您也会自动获得length属性。