空对象动态添加属性(面试常考)返回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
- 空对象动态添加属性(面试常考)返回JSON,曾经惨败的一道面试题
- 一道常考的javaSE面试题
- 一道曾经微软的面试题
- net常考的面试题
- c/c++常考的面试题
- jquery常考的一些面试题
- 常考的Ajax面试题
- 面试常考的 group by +having 试题
- 常考的数据库面试题及答案
- Android笔试面试题二(常考问答)
- Android笔试面试题一(常考选择填空)
- Java笔试面试题二(常考问答)
- 经典的农夫养牛问题(常考的面试题)
- c/c++常考笔试面试题
- 软件工程常考笔试面试题
- 常考Java面试题和答案
- C/C++常考笔试面试题
- C#面试题(曾经面试过三次)
- Android之Adapter用法总结
- Android Drawable Resources系列1:Bitmap(dither图像抖动、tileMode平铺模式)
- kudu compaction design
- Android 内存泄漏总结
- 对Oracle Redo log的学习之一
- 空对象动态添加属性(面试常考)返回JSON,曾经惨败的一道面试题
- Android学习笔记十六:Android listview与adapter用法
- 运维开发平台化ipmi和Cobbler构建自动化装机平台
- Android开源项目收集
- 欢迎使用CSDN-markdown编辑器
- 仿CSDN客户端首页(二)----拖拽排序Tabs的实现
- HDU 5685 (前缀+逆元 水~)
- 并发量计算
- UVA 1160 X-Plosives