JS对JSON对象遍历输出的时候真的是按照顺序输出吗?
对象的遍历输出并不是按照对象属性定义顺序来的,那么是按照什么规则来的呢,仔细深⼊研究你会发现,这还跟浏览器有关
系,Chrome跟IE是不⼀样的,所以给出以下结论:
Chrome Opera 的 JavaScript 解析引擎遵循的是新版 ECMA-262 第五版规范。因此,使⽤ for-in 语句遍历对象属性时遍历书序并⾮属性构建顺序。⽽ IE6 IE7 IE8 Firefox Safari 的 JavaScript 解析引擎遵循的是较⽼的 ECMA-262 第三版规范,属性遍历顺序由属性构建的顺序决定。
Chrome Opera 中使⽤ for-in 语句遍历对象属性时会遵循⼀个规律:
它们会先提取所有 key 的 parseFloat 值为⾮负整数的属性,然后根据数字顺序对属性排序⾸先遍历出来,然后按照对象定义的顺序遍历余下的所有属性。
那么,解决办法呢?
可以把对象通过Object.keys提取对象的key出来变成数组,然后通过数组的排序,然后遍历数组,通过key去取对象的属性值。
有⼀些业务要求对对象的各属性值按照⼀定顺序排列,⽽给定的对象属性⼜不确定能按顺序排列(如,数字⼤⼩顺序)
//************************* JSON对象属性排序*********************************//
//要求传⼊参数 JsonData 为JSON对象
//输出结果为JSON对象
//输出的对象为按key值升序排列的
function JsonObjSort(JsonData)
{
if(JsonData)
{
var JsonKeyArray=new Array();
for(x in JsonData)
{
var xToInt=parseInt(x);
JsonKeyArray.push(xToInt);
}
JsonKeyArray=JsonKeyArray.sort();//对数组升序排列
var NewJsonStr="" ;
for(var i=0;i<JsonKeyArray.length;i++)
{
if(i>0)
{
NewJsonStr += ',';
}
var value = JsonData[JsonKeyArray[i]];
js获取json的key和valueNewJsonStr += '"'+JsonKeyArray[i]+ '"' +':'+value;
}
var NewJsonStrObj=eval('('+'{'+NewJsonStr+'}'+')');
//console.log(NewJsonStrObj);
return NewJsonStrObj ;
}
else
return "";
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论