1

例如,我有以下 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方法的最有效方法是什么。

任何帮助将不胜感激(请询问您是否需要澄清我的问题)。

谢谢。

4

3 回答 3

5

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

length属性是 Arrays 的特殊成员。(数组只是具有特定 [[prototype]] 并了解如何神奇地更新的对象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 对象文字)排序,并不意味着顺序。

于 2012-05-28T01:18:07.597 回答
2

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

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

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

于 2012-05-28T01:19:26.327 回答
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属性。

于 2012-05-28T01:19:11.053 回答