【前端笔试】实现两个json对象的比较
来源:互联网 发布:centos更新命令 编辑:程序博客网 时间:2024/06/06 05:59
便利蜂前端笔试题~
让实现一个function,比较两个json格式的数据是否一致,
我是用for of 去遍历,回来试了才知道for of 是不能遍历的对象的,应该用for in 的,反正官方是这么说的:
The for...of statement creates a loop iterating over iterable objects (including Array, Map, Set, String, TypedArray, arguments object and so on), invoking a custom iteration hook with statements to be executed for the value of each distinct property.
目前为止,你可以这样理解:JS已经有了几个不同的集合类,而且更多的集合类正在被添加进来。for-of循环语句的设计初衷就是适用于所有这些集合类。
for-of并不能用于普通的旧对象。如果你想要遍历对象的所有属性,可以使用for-in,也可以通过Object.keys(object)将对象的所有属性以数组形式返回后再使用for-of。
for (var key of Object.keys(someObject)) { console.log(key + ": " + someObject[key]); }
说一下这个题吧。主要逻辑如下:
1. 二者长度是否一致,不一致返回false
自以为是的我直接json.length,其实是错误的。
有两种方法解决,一种是常规遍历:
var count = 0;for(let key in data.phones) { if(data.phones.hasOwnProperty(key)) { count++; }}
另一种是转成数组:
if(Object.keys(obj1).length != Object.keys(obj2).length){ return false;}
2.比较key 和 value
- 循环遍历json1,for in 获得key
- hasOwnProperty判断json2中是否有该key属性。
- 比较json1[key] === json2[key]
注意:
1.获取value 使用 json1[s]而不是json1.s;
2.在比较value之前,需要先判断json2中是否有key属性,一开始我认为如果没有hasOwnProperty方法判断,json2[key]会报错。然而实际不是这样的,对于json[x],即使x不是json里面的属性,也不会报错,只会返回undifined。但是hasOwnProperty仍然有存在的原因,比如json1里某属性值为undifined:
var json1 = { "a": 1, "b": 2, "c":undefined,}var json2 = { "a": 1, "b": 2, "d": 3,}json1["c"] ===json2["c"] //ture
3.注意比较value要用===,同时比较类型和值;
否则如下obj比较就返回true了
var json1 = {"a": true, "b": 2, "c": false,}var json2 = { "a": 1, "b": 2, "c": 0,}
完整代码如下:
let fun = (obj1,obj2) =>{ if(Object.keys(obj1).length != Object.keys(obj2).length){ return false; }else{ for (let x in obj1) { if(obj2.hasOwnProperty(x)){ if(obj1[x] != obj2[x]){ return false; } }else{ return false; } } } return true;}
阅读全文
0 0
- 【前端笔试】实现两个json对象的比较
- 比较两个Json对象是否相等
- 实现Java中对象比较的两个方法
- 实现Java中对象比较的两个方法
- 两个对象之间的比较,实现接口IComparable
- 关于两个对象的比较
- java中Comparator实现两个对象比较
- java比较两段json不同工具类(两个同一类型的java对象比较也推荐转成JSON再进行比较)
- JS中如何比较两个Json对象是否相等
- json对象两个方法的解析
- JSON对象的两个方法细解
- [反射]比较两个VO对象的值
- C#两个复杂对象集合的比较
- 比较两个Integer对象的小知识点
- 比较两个可为null的对象
- Java 比较两个Date对象的大小
- equals比较两个对象的内容
- 两个Integer对象值的比较
- 测试之黑盒测试用例设计方法(场景法)
- 【ES6】拦截器 Proxy
- Js控制HTML5 Audio 音乐播放和关闭
- QT5的程序打包发布(将QT5的工程项目打包成一个exe程序)
- cmake中CMakeLists.txt脚本的常用语法
- 【前端笔试】实现两个json对象的比较
- C++模板与泛型编程(1.函数模板与类模板)
- 正则表达式之道
- jmeter请求数据加密在发送方法
- c++ 常见问题
- Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)
- 文章中插入Visio及Matlab矢量图
- HDU1238 Substrings(kmp,最长公共子串)
- C++ operator关键字(重载操作符)