[置顶] 空对象动态添加属性(面试常考)返回JSON,曾经惨败的一道面试题
2016-05-17 17:53
615 查看
<!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>
相关文章推荐
- 面向程序员的数据库访问性能优化法则
- 奋斗吧,程序员——第三十八章 旧时茅店社林边,路转溪头忽见
- 如何准备互联网公司面试(算法相关)
- 常见iOS开发面试题(有10w多访问量的面试题)
- w3school的职业建议
- 给程序员的忠告(转)
- 程序员软考资料
- 畅捷通前端面试题
- android面试精华题目总结
- Android常用面试题大全
- 刺杀程序员小王
- 程序员眼中的古典名画
- Android面试题目中容易遗漏的知识点<持续更新>
- php面试总结
- 传智播客助力中国职业教育
- 真实大起底:一名黑马程序员的就业经历
- 万众期待,黑马程序员强势推出PHP学科!
- 努力提高自己
- JAVA多线程和并发基础面试问答
- 程序员你为什么这么忙?【转】