比方说,我有以下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
方法。
非常感谢任何帮助(请询问您是否需要澄清我的问题)。
感谢。
答案 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
属性。