大疆2019秋招前端笔试(2018.7.8)五道简答题

大疆这么早就秋招,应该是提前批吧...

1.快速排序的算法实现?

答案可参考链接:https://blog.csdn.net/Charles_Tian/article/details/80967523

2.进程间的方式有哪些?

答案可参考链接:https://blog.csdn.net/violet_echo_0908/article/details/51201278

3.数组和链表的区别?

答案可参考链接:https://blog.csdn.net/qq_25806863/article/details/70607204

4.如何将浮点数点左边的数每三位添加一个逗号,如12000000.11转化为12,000,000.11?

(1)正则实现一:

function commafy(num){
  return num && num
    .toString()
    .replace(/(\d)(?=(\d{3})+\.)/g, function($1, $2){
      return $2 + ',';
    });
}
console.log(commafy(1231423423.22))//1,231,423,423.22

(2)正则实现二:

var milliFormat = (input) => {
  	return input && input.toString()
      .replace(/(^|\s)\d+/g, (m) => m.replace(/(?=(?!\b)(\d{3})+$)/g, ','))
}

console.log(milliFormat(1231423423.22))//1,231,423,423.22

(3)字符串操作方法:

function formatNum(num){
	var newStr = "";
	var count = 0;
	var str = num.toString(); 
	for(var i = str.indexOf(".")-1;i>=0;i--){
		if(count % 3 == 0 && count != 0){
		   newStr = str.charAt(i) + "," + newStr;
		}else{
		   newStr = str.charAt(i) + newStr; //逐个字符相接起来
		}
		count++;
	}
   	str = newStr + str.substr((str).indexOf("."));
   	return str
}

console.log(formatNum(1231423423.22))//1,231,423,423.22

5.事件委托(这题给出了一个ul标签和三个li标签,每个li标签各有一个id名,js部分通过for循环给每个li标签添加了一个click事件。问以下代码还有什么可以优化的地方?)

原题代码(大致结构一样,可能填充数据不一样,不记得了):

HTML部分:

<ul id='menu'>
	<li id='list1'>list1 was clicked</li>
	<li id='list2'>list2 was clicked</li>
	<li id='list3'>list3 was clicked</li>
</ul>
JS部分:
var list = document.getElementsByTagName('li');
for (var i = 0; i < list.length; i++) {
	list[i].onclick = function(){
		console.log(this.innerHTML)
	}
};

懂得人一眼就看出这题考察的是什么知识点。我们知道每添加一个事件,就会耗费一部分内存,所以事件越少性能越高。

事件委托就是利用事件冒泡的原理,委托子元素的父元素去代理执行事件,所以,上述方式是添加了三个事件,而通过事件委托可只需要添加一个点击事件即可实现相同的功能。

修改之后的JS代码:

var menu = document.getElementById('menu');
menu.addEventListener('click',function(e){
	console.log(e.target.id + ' was clicked')
})

猜你喜欢

转载自blog.csdn.net/charles_tian/article/details/80967468
今日推荐