面试一:MF
时间:2019-1-2
试题一
// [mf: stringify-query-string] // 类型: x z // 时长: 15 分钟 // 姓名: // 日期: // 实现下面的 stringify 函数, 用于将键值对数据序列化为 query string. // 提示: // 运行代码快捷键: Ctrl + S function stringify(data) { var str = ''; //str = JSON.stringify(data); str = JSON.stringify(data); //str = encodeURIComponent(str); //str = JSON.toString(data) return str; } // 参考用例: const query = stringify({ id: '123', subject: 'hello, world!' }); console.log('输出结果:'); console.log(query); // 输出结果参考 // 输出结果: // id=123&subject=hello%2C%20world!
附:
function stringify(data){ var str = ''; var keys = []; // if(typedof(data) == 'object'){ // keys = data.keys(); // } for(var item in data) { if (data.hasOwnProperty(item)) keys.push(item); } for(i=0;i<keys.length;i++){ str += "&" + keys[i] +"=" + escape(data[keys[i]]); } str = str.substring(1); return str; } q = stringify({ id: '123', subject: 'hello, world!' }); console.log('输出结果:'); console.log(q);
试题二:
// [mf: string-template] // 类型: xz // 时长: 15 分钟 // 姓名: // 日期: // 实现下面的 format 函数, 用于替换字符串模板中对应的占位符. // 提示: // 运行代码快捷键: Ctrl + S function format(template, data) { //思路:正则匹配 + 提取 var str = template; var keys = []; var values = []; for(var i in data){ if(data.hasOwnProperty(i)){ keys.push(i); values.push(data[i]); } } for(var item=0;item<keys.length;item++){ str = str.replace(new RegExp("{" + keys[item]+"}","g"),values[item]); } return str; } // 参考用例: const output = format('{name}今年{age}岁了.', { name: '狮子大哥', age: 18, }); console.log('输出结果:'); console.log(output); // 输出结果参考 // 输出结果: // 狮子大哥今年18岁了.
试题三
// [mf: async-task-queue] // 类型: xz // 时长: 30 分钟 // 姓名: // 日期: // 修改下面的 start 函数, 使 execute 对应的 id 按顺序打印. // 提示: // 运行代码快捷键: Ctrl + S var queue = []; var flag = false; //是否执行完 function exe() { if (queue.length > 0) { execute(queue.shift(id)).then(() => { exe(); }).catch(console.error); } } function start(id) { queue.push(id); if (!flag) { exe(); flag = true; } } // 测试代码 (请勿更改): console.log('输出结果:'); for (let i = 0; i < 5; i++) { start(i); } function sleep(duration) { return new Promise(resolve => setTimeout(resolve, duration)); } function execute(id) { let duration = Math.floor(Math.random() * 500); return sleep(duration).then(() => { console.log('id', id); }); } // 输出结果参考 // 输出结果: // id 0 // id 1 // id 2 // id 3 // id 4
参考文献
《JavaScript高级程序设计》