前端企业面试题:企业真实案例——27
2020-09-09 15:27
861 查看
现在有一个json, 在某一维度中可能出现'score'键, 请使用任意语言写一个check方法判断该json是否满足要求. 要求如下:
a. 任意一个键为score的值预期是整型数字且大于60, 则检查通过
b. 若不存在键为score的值, 则检查通过
这道题目本身的质量是不错的, 可惜出题的人语文可能不太好.
最讨厌这种看似严谨实则不会说人话的题目描述, 因为题目中一旦出现歧义, 你无法通过日常语言习惯进行判断. 题目要求a明显就是有歧义的.
我按照我的理解, 尝试把它翻译成人类能看懂的话. 内容如下:
有一个json, 对象结构可能较深.写一个check方法来遍历整个对象树, 做出如下判断:
a. 无论在树的哪一层哪一个节点, 只要出现了 score属性, 且为数字类型, 且大于60 ,则表示通过
b. 若遍历整棵树, 没找到一个score属性, 则同样表示通过
[code]function check(target){ let unchecklist = [target]; let len = 1; let hasScore = false; for(let i=0; i<len; i++) { try { each(unchecklist[i]); } catch(e) { if(e.message == "pass") return true; } } //如果有score属性, 并且没有符合条件, 那么返回false //如果没有score属性, 也可以通过 return !hasScore; function each(m){ for(let attr in m) { if(attr=="score" && typeof m[attr] === "number") { hasScore = true; //一旦发现了符合条件的score属性 //这里无法直接返回, 因此抛出异常通知上层函数 if(m[attr] > 60) throw new Error("pass"); } else if( typeof m[attr] === "object" ) { //若属性没有符合条件, 但是个对象类型 //则放入待检测列表, 继续检测 unchecklist.push(m[attr]); //改变len长度, 使得上层函数循环得以继续 len++; } } } } let jsonobj = { "name" : "BeJson", "url" : "http://www.bejson.com", "score" : "abc", "address" : { "score" : 63, "city" : "江苏苏州", "country" : "中国" }, "links" : [{ "score" : 50, "url" : "http://www.google.com" }] } check(jsonobj); //true
相关文章推荐
- 前端企业面试题:企业真实案例——24
- 前端企业面试题:企业真实案例——25
- 前端企业面试题:企业真实案例——26
- 前端企业面试题:企业真实案例——21
- 前端企业面试题:企业真实案例——20
- 2017最新企业Shell面试题及企业运维实战共30道案例
- 前端面试题:企业面试真题——17
- 前端面试题:企业面试真题——15
- 大数据真实企业的面试题《五》--某Master
- 大数据真实企业的面试题《六》--北京某数字网络科技有限公司
- 企业Shell面试题14:开发脚本入侵检测与报警案例
- 【实战】mysql-MHA企业真实案例
- 企业真实案例:zabbix调用脚本超时解决方案
- 前端面试题:企业面试真题—4
- 前端面试题:企业面试真题—8
- 大数据真实企业的面试题《十》--spark面试笔试题
- 真实工作经验总结——案例解析企业选型操作步骤
- [转] 一个企业的自动化测试实施真实案例
- 前端面试题:企业面试真题—5
- 前端面试题:企业面试真题—9