如何为domainTypees函数正确应用JavaScript三元运算符?
如何用三元运算符改写域名类型判断的if-else逻辑?
嘿,我看到你在把那段if-else转换成三元运算符时踩坑了,咱们来拆解问题并搞定它~
首先得说你之前的三元写法有两个关键问题:
- 你在三元表达式里直接用了
return,这会在第一次循环时就直接终止函数,后面的域名根本没机会处理; - 三元运算符本质是表达式(用来返回一个值),不是执行语句的结构,你直接把
push写在里面的用法不对。
正确的三元运算符改写方式
我们应该用三元运算符先算出当前域名对应的类型字符串,再把这个字符串push到数组里。具体写法如下:
function domainTypees(domains) { const domainType = []; for (let i = 0; i < domains.length; i++) { const domain = domains[i].split("."); const lastdomain = domain[domain.length - 1]; // 用三元运算符获取对应的类型名称 const typeName = lastdomain === "org" ? "organization" : lastdomain === "com" ? "commercial" : lastdomain === "net" ? "network" : lastdomain === "info" ? "information" : ""; // 可选:给未知后缀加个默认值,避免出现undefined domainType.push(typeName); } return domainType; } console.log(domainTypees(["en.wiki.org", "codefights.com", "happy.net", "code.info"]));
额外推荐:更易读的多分支写法
其实对于这种多分支的键值映射场景,用对象映射比嵌套三元更清晰,维护起来也更方便,给你参考下:
function domainTypees(domains) { const domainType = []; // 先定义后缀和类型的映射关系 const suffixMap = { org: "organization", com: "commercial", net: "network", info: "information" }; for (let i = 0; i < domains.length; i++) { const domain = domains[i].split("."); const lastdomain = domain[domain.length - 1]; // 直接从映射对象里取值,没有的话用默认值 domainType.push(suffixMap[lastdomain] || ""); } return domainType; }
这样不管以后要加多少新的后缀类型,只要在suffixMap里加键值对就行,比嵌套三元清爽多啦~
内容的提问来源于stack exchange,提问作者Cosmel
相关产品推荐
相关产品推荐

