1 每三秒输出一次i值
题目
每隔三秒输出一次i值
for(var i = 0; i < 5; i++){
// TODO
}
我的解法
for(var i = 0;i < 5;i++){
(function(i){
setTimeout(() => {console.log(i);}, 3000 * i);
}(i));
}
这里用的是var
,所以必须要用立即执行函数,而且setTimeout
是异步任务,所以会被同时放到异步任务里面去,这就需要设置定时器为3000*i
2 下面代码的输出结果是什么
题目
var f = function() {
var c = "ccc";
return {
a: function() {
return c;
},
b: function(d) {
c = d;
}
}
}()
console.warn(f.a())
console.warn(f.c)
console.warn(f.b("www"))
console.warn(f.a())
我的题解
- ccc
- undefined
- undefined
- www
第一个应该是直接就调用了f
的属性,直接返回c
第二个是var
的作用域问题,f
只是一个函数的实例化,f.c
没有定义
第三个没有返回值
3 找出多出来的字符
题目
有两个小写字符串s1、s2,s2是s1经过打乱后增加一个小写字符得到的, 编程得出s2中增加的字符,算法时间复杂度最好接近O(n)(如s1是’abc’,s2是’cbad’,那么增加的字符为‘d’。
答案
思路
将s1和s2转化成数组,然后用数组的sort
方法重新排列,再进行对应位置的比较,只要不相等,那s2的那个就是多出来的
代码
s1 = s1.split("").sort();
s2 = s2.split("").sort();
for(let i = 0; i < s2.length; i++){
if(s1[i] != s2[i]){
console.log(s2[i]);
break;
}
}
4 实现数组的随机排序
思路
用random
弄出随机的下标
将随机的存入到函数
将随机下标对应的值存入到新数组的末尾
删除原数组里的这个值
代码实现
function randomSort(arr){
let result = [];
while (arr.length > 0) {
var randomIndex = Math.floor(Math.random() * arr.length);
result.push(arr[randomIndex]);
arr.splice(randomIndex, 1);
}
return result;
}