推荐:数据科学课程和书籍清单以及培训讲座


一亩三分地论坛

 找回密码
 获取更多干活,快来注册

一亩三分地官方iOS手机应用下载
查看: 630|回复: 6
收起左侧

这道题应该怎么写?

[复制链接] |试试Instant~ |关注本帖
dongogogo776 发表于 2017-6-16 12:45:30 | 显示全部楼层 |阅读模式

2017(4-6月) 码农类 硕士 全职@Dropbox - 猎头 - 技术电面 |Other在职跳槽

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干活,快来注册

x
要求写一个类,完成template string功能。具体如下:
var tmp = Template("{name} is a {if #isMale}man{/if}.")
tmp.format({name:'John', isMale:false}). visit 1point3acres.com for more.

这样就会输出 John is a man.

要实现的东西有3层:
1. Variable replacement
2. If statement
3. Nested if statement
. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
. visit 1point3acres.com for more.
.鐣欏璁哄潧-涓浜-涓夊垎鍦



这道题真能45分钟内能写出来吗?感觉是个小型的library,有点类似于dust.js

say543 发表于 2017-6-16 14:50:38 | 显示全部楼层
关注一亩三分地公众号:
Warald_一亩三分地
有要求语言吗 JS?
回复 支持 反对

使用道具 举报

easyandme 发表于 2017-6-17 04:54:38 | 显示全部楼层
关注一亩三分地微博:
Warald
  1. class Template {
  2.     constructor(str) {. From 1point 3acres bbs
  3.         this.var1 = this.constructor.getvar1(str)
  4.         this.var2 = this.constructor.getvar2(str). from: 1point3acres.com/bbs
  5.         this.bool = this.constructor.getBool(str).1point3acres缃
  6.         this.mid = this.constructor.getMid(str)
  7.     }

  8.     format(obj) {
  9.         if (obj.hasOwnProperty(this.var1) && obj.hasOwnProperty(this.bool)) {
  10.             this.constructor.output(obj[this.var1], this.mid, obj[this.bool], this.var2)
  11.         }
  12.     }

  13.     static getvar1(str) {
  14.         let re = /{([0-9a-zA-Z\_]+)}/g. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
  15.         return re.exec(str)[1]
  16.     }
  17.     static getBool(str) {
  18.         let re = /#([a-zA-Z0-9]+)}/g
  19.         return re.exec(str)[1]. 鍥磋鎴戜滑@1point 3 acres
  20.     }
  21.     static getvar2(str) {
  22.         let re = /{if.+}([0-9a-zA-Z\_]+){\/if}/g
  23.         return re.exec(str)[1]
  24.     }
  25.     static getMid(str) {
  26.         let re = /}(.*){if/g
  27.         return re.exec(str)[1]
  28.     }
  29.     static output(str1, mid, bool, str2) {
  30.         console.log(str1 + mid + (bool ? str2 : "")). 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  31.     }
  32. }

  33. let tmp = new Template("{name} is a {if #isMale}man{/if}."). from: 1point3acres.com/bbs
  34. let tmp2 = new Template("{name} is a {if #isGirl}girl{/if}.")
  35. tmp.format({name:'John', isMale:false})  // "John is a "
  36. tmp2.format({name:'Jane Doe', isGirl:true})  // "Jane Doe is a girl"
复制代码
回复 支持 反对

使用道具 举报

 楼主| dongogogo776 发表于 2017-6-17 06:14:33 | 显示全部楼层

你这个答案好像不怎么work,智能handle一个variable substitution和if
题目要求则是无限个
而且if还需要支持nested if
回复 支持 反对

使用道具 举报

 楼主| dongogogo776 发表于 2017-6-17 06:15:14 | 显示全部楼层
say543 发表于 2017-6-16 14:50
有要求语言吗 JS?

语言无所谓,我说js行不行,他说可以
回复 支持 反对

使用道具 举报

say543 发表于 2017-6-18 14:33:47 | 显示全部楼层
dongogogo776 发表于 2017-6-17 06:15
语言无所谓,我说js行不行,他说可以

. visit 1point3acres.com for more.
感觉挺难的 考察点楼主觉得是啥?
回复 支持 反对

使用道具 举报

 楼主| dongogogo776 发表于 2017-6-23 03:28:17 | 显示全部楼层
say543 发表于 2017-6-18 14:33-google 1point3acres
感觉挺难的 考察点楼主觉得是啥?

数据结构肯定是stack啊,不过怎么把string切分出不同的block塞到stack去,这个相当麻烦。也不是不能做,但45分钟又无debug环境,我是做不出来的。
回复 支持 反对

使用道具 举报

本版积分规则

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2017-7-27 08:45

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表