面试经验合集-Web前端<一>

面试一: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高级程序设计》

原文地址:https://www.cnblogs.com/johnnyzen/p/10207907.html