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]];
            NewJsonStr += ‘"‘+JsonKeyArray[i]+ ‘"‘ +‘:‘+value;
        }

        var NewJsonStrObj=eval(‘(‘+‘{‘+NewJsonStr+‘}‘+‘)‘);
        //console.log(NewJsonStrObj);
        return NewJsonStrObj ;
    }
    else
        return "";
}

原文地址:https://www.cnblogs.com/dyhao/p/10268052.html

时间: 2024-10-27 20:35:07

JS对JSON对象遍历输出的时候真的是按照顺序输出吗?的相关文章

json对象遍历输出key和value

js遍历json对象原生js遍历json对象 遍历json对象: 无规律: <11script> var json = [ {dd:'SB',AA:'东东',re1:123}, {cccc:'dd',lk:'1qw'} ]; for(var i=0,l=json.length;i<l;i++){ for(var key in json[i]){ alert(key+':'+json[i][key]); } } </script> 有规律: 12345678910111213p

Js拼Json对象

我们通常会拼字符串,但是拼字符串的话,遇见占位符会出错. 下面分享一个拼js拼json对象的方法: var jsonArr = []; $("#firsttr li").find("input").each(function (index) { var temp = index + 1; jsonArr.push({"Id":objjson[objindex].Id,"Title": $(this).val(),"S

js中 json对象与json字符串相互转换的几种方式

以下总结js中 json对象与json字符串相互转换的几种方式: 一.JSON对象转化为JSON字符串 1.使用JSON.stringify()方法进行转换 该方法不支持较老版本的IE浏览器,比如:ie8(兼容模式).ie7.ie6. var jsonStr = JSON.stringify(jsonObj); alert(jsonStr); var jsonStr = jsonObj.toJSONString(); alert(jsonStr); 二.JSON字符串转化为JSON对象 1.使用

【Js】JSON对象、JSON字符的使用总结

JSON对象 / JSON字符串区别 抛出一个最常见的疑问:什么是"JSON对象",什么是"JSON字符串",它俩的区别是什么? 废话不多说,直接上代码. 1.JSON对象: // javascript对象字面量写法 var obj = { "name" : "Jay","age" : "18" }: //JSON对象写法 var json = {name : "jay&quo

JSON对象遍历方法

JSON对象提前不知道其属性和结构,遍历其值 var json2 = { "name": "txt1", "name2": "txt2" }; for (var js2 in json2) { alert(js2 + "=" + json2[js2]); } //结果 1:name=txt1 2:name2=txt2

jquery中ajax如何返回值到上层函数的方法以及对于js处理json对象方法的记录

①在我们做前端js处理的时候我们经常会将一些公用的js方法封装起来,方便别的地方调用,但是我们要做的是需要将请求返回的值传递给调用者,这里我记录了在js中采用ajax方法获取后台数据并返回给调用者的方法,我们平时使用ajax的方法基本为如: <span style="font-family:FangSong_GB2312;font-size:18px;">function AutoGetOpenid(){ var personJson; $.ajax({ url : &qu

js中json对象和字符串的转换

JSON.parse() : 字符串-->json对象 1 var str = '{"name":"huangxiaojian","age":"23"}'//单引号写在{}外,每个属性名都必须用双引号,否则会抛出异常. 2 JSON.parse(str) 3 结果: 4 Object 5 age: "23" 6 name: "huangxiaojian" 7 __proto__:

js判断json对象是否为空

if("{}" == JSON.stringify(json对象)) { // 满足条件就是空 } 原文地址:https://www.cnblogs.com/xiaostudy/p/11080106.html

利用js将 json对象在textarea中赋值与展示

明明很简单的东西,可惜网上一大堆废话.在此记录,转需. jsonStr = JSON.stringify(jsondata,null,4); example: <!doctype html> <!-- paulirish.com/2008/conditional-stylesheets-vs-css-hacks-answer-neither/ --> <!--[if lt IE 7 ]> <html class="no-js ie6" lang