我是靠谱客的博主 时尚纸鹤,最近开发中收集的这篇文章主要介绍前端企业面试题:企业真实案例——27,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

现在有一个json, 在某一维度中可能出现'score'键, 请使用任意语言写一个check方法判断该json是否满足要求. 要求如下:
a. 任意一个键为score的值预期是整型数字且大于60, 则检查通过
b. 若不存在键为score的值, 则检查通过

这道题目本身的质量是不错的, 可惜出题的人语文可能不太好.

最讨厌这种看似严谨实则不会说人话的题目描述, 因为题目中一旦出现歧义, 你无法通过日常语言习惯进行判断. 题目要求a明显就是有歧义的.

我按照我的理解, 尝试把它翻译成人类能看懂的话. 内容如下:

有一个json, 对象结构可能较深.写一个check方法来遍历整个对象树, 做出如下判断:

a. 无论在树的哪一层哪一个节点, 只要出现了 score属性, 且为数字类型, 且大于60 ,则表示通过

b. 若遍历整棵树, 没找到一个score属性, 则同样表示通过

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

最后

以上就是时尚纸鹤为你收集整理的前端企业面试题:企业真实案例——27的全部内容,希望文章能够帮你解决前端企业面试题:企业真实案例——27所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部