空对象动态添加属性(面试常考)返回JSON,曾经惨败的一道面试题

来源:互联网 发布:java读取文件内容乱码 编辑:程序博客网 时间:2024/05/21 21:38

这里写图片描述

<!doctype html><html lang="en">    <head>        <meta charset="UTF-8" />        <title>Document</title>        <script type="text/javascript">            var b = ['a', 'b', 'c'];            var a = {};            a[b[0]] = 'aaaaaaa';            a[b[1]] = 'bbbbbbb';            a[b[2]] = 'ccccccc';            for (var i in a) {                console.log(i + ':' + a[i]);            }            console.log(a);            if (!('w' in a)) {                a['w'] = 123;            }            for (var i in a) {                console.log(i + ':' + a[i]);            }            console.log(a);            console.log(JSON.stringify(a));        </script>    </head>    <body>    </body></html>

这里写图片描述

<!doctype html><html lang="en">    <head>        <meta charset="UTF-8" />        <title>Document</title>        <script type="text/javascript">            var a = ['a', 'abc', 'abcd', 'a', 'a', 'a', 'a', 'abc'];            var obj = {};            var Obj2 = {};            console.log('-------------------第一种方法-------------------');            for (var i = 0; i < a.length; i++) {                if (!Obj2[a[i]]) {                    Obj2[a[i]] = 1;                } else {                    Obj2[a[i]]++;                }            }            console.log(Obj2);            console.log(JSON.stringify(Obj2));            console.log(Obj2.a)            console.log('-------------------第二种方法-------------------');            for (var i = 0; i < a.length; i++) {                if (!(a[i] in obj)) {                    obj[a[i]] = 1;                } else {                    obj[a[i]]++;                }            }            console.log(obj);            console.log(JSON.stringify(obj));            console.log(obj.a)        </script>    </head>    <body>    </body></html>

拓展阅读 $.extend,JSON.stringify() ,JSON.parse()

这里写图片描述

<!doctype html><html lang="en">    <head>        <meta charset="UTF-8" />        <script type="text/javascript" src="jquery-2.2.4.min.js"></script>        <title>Document</title>        <script type="text/javascript">            var a = {                "name": "libin",                "age": "30"            };            var b = {                "name": "libin",                "sex": "男"            };            var c = $.extend({},a, b);  //如果写成$.extend(a, b)会改变a对象的结构            console.log(c);            var d = JSON.stringify(c);            console.log(d + ",对象类型是:" + typeof d + ",d.name的值:" + d.name);            var e = JSON.parse(d);            console.log(e);            console.log(e + ",对象类型是:" + typeof e + ",e.name的值:" + e.name);        </script>    </head>    <body>    </body></html>

比较两个JSON是否相等

<!DOCTYPE html><html>    <head>        <meta charset="UTF-8">        <title>比较两个JSON是否相等</title>        <script type="text/javascript">            var jsonObjA = {                "Name": "MyName",                "Company": "MyCompany",                "Infos": [{                    "Age": "100"                }, {                    "Box": [{                        "Height": "100"                    }, {                        "Weight": "200"                    }]                }],                "Address": "马栏山"            }            var jsonObjB = {                "Address": "马栏山",                "Name": "MyName",                "Company": "MyCompany",                "Infos": [{                    "Age": "100"                }, {                    "Box": [{                        "Height": "100"                    }, {                        "Weight": "200"                    }]                }],            }            console.log("方法有局限:将JSON的对象序列换一下:'Address': '马栏山'");            console.log(JSON.stringify(jsonObjA) == JSON.stringify(jsonObjB));        </script>        <script type="text/javascript">            function isObj(object) {                return object && typeof(object) == 'object' && Object.prototype.toString.call(object).toLowerCase() == "[object object]";            }            function isArray(object) {                return object && typeof(object) == 'object' && object.constructor == Array;            }            function getLength(object) {                var count = 0;                for(var i in object) count++;                return count;            }            function Compare(objA, objB) {                if(!isObj(objA) || !isObj(objB)) return false; //判断类型是否正确                if(getLength(objA) != getLength(objB)) return false; //判断长度是否一致                return CompareObj(objA, objB, true); //默认为true            }            function CompareObj(objA, objB, flag) {                for(var key in objA) {                    if(!flag) //跳出整个循环                        break;                    if(!objB.hasOwnProperty(key)) {                        flag = false;                        break;                    }                    if(!isArray(objA[key])) { //子级不是数组时,比较属性值                        if(objB[key] != objA[key]) {                            flag = false;                            break;                        }                    } else {                        if(!isArray(objB[key])) {                            flag = false;                            break;                        }                        var oA = objA[key],                            oB = objB[key];                        if(oA.length != oB.length) {                            flag = false;                            break;                        }                        for(var k in oA) {                            if(!flag) //这里跳出循环是为了不让递归继续                                break;                            flag = CompareObj(oA[k], oB[k], flag);                        }                    }                }                return flag;            }            var result = Compare(jsonObjA, jsonObjB);            console.log(result); // true or false        </script>    </head>    <body>    </body></html>
0 0
原创粉丝点击