面试题
数组去重:
var result = [];
var obj = {};
for(var i =0;i<arr.length;i++){
if( !obj[arr[i]] ){
result.push( arr[i] );
obj[arr[i]] = 1;
}
return result;
}
alert(aaa([ 5,2,7,5,1,7,5,4 ]))
昌泡排序:(思路是两个两个比较,比较小的放到前面,那么最后的那个就是最大,这样的进行下去)
function aaa(arr){
for(var i =0;i<arr.length;i++){
for(var j =0;j<arr.length-i;j++){
toCon(j,j+1);
}
function toCon(prev,next){
if(arr[prev] > arr[next] ){
var tmp = '';
if( arr[prev] > arr[next] ){
tmp = arr[prev];
arr[prev] = arr[next];
arr[next] = tmp;
}
}
return arr;
}
}
}
function aaa(n){console.log(n);if(n<=2){return 1;}return aaa(n-1)+aaa(n-2)};
aaa(8) // 21
另一种方式:
function aaa(n){
var num1 =1;
var num2 = 2;
var num3 = 0;
for(var i = 0;i<n-2;i++){
num3=num1+num2;
num1 = num2;
num2 = num3;
}
return num3
}
一种算法 斐波那契 数列 1,1,2,3,5,8,13,21
如果 n小于100就返回n,否则返回100
Math.min(n,100)
var arr = [n,100];
arr.sort(function(n1,n2){
return n1-n2
})
return arr[0]
将两个数颠倒
var a = 5;
var b = 4;
a=[a,b];
b=a[0];
a=a[1];
例如如果n=5;不用for循环,返回[1,2,3,4,5]
function show(n){
var arr = [];
return (function(){
arr.unshift(n);
n--;
if(n!=0){
arguments.callee();
}
return arr;
})()
}
变量提前
var a=10;
function aaa(){
alert(a); // undefined
var a = 20;
}
aaa();
正则:
var str = 'aaacbbbssseeeee';
var re = /(\w)\1+/g;
str.replace(re,function($0,$1){
})
给数字加分隔符2,333,455
(?=) 前向声明
(?!)反前向声明
function test( str ){
var re = /(?=(?!\b) (\d{3})+$)/g;
return str.replace(re,',')
}
alert(test(str))
函数声明与函数表达式
unm();
if(1){
function unm(){
console.log(1)
}
}else{
function unm(){
console.log(2)
}
}
输出结果是2,因为函数声明前置
var obj = {
eaa:1,
eee:function(){console.log(this.eaa)}
};
obj.eee() //1;
另一个题
var obj = {
eaa:1,
eee:function(){console.log(this.eaa)}
};
(obj.eee,())
var num = 0;
function aaa(){
console.log(num);
var num;
}
aaa() // undefined var num变量提升
题1:
var a=null;
undefined
var b;
undefined
a==b
true
题2
var a=1;
function aaa(a){a=2;console.log(a)}
aaa(a);
打印结果是2
a 在函数外输出a为1
1
题3
var num =2;
function foo(){return num;function num(){return num +'|'+this.num}}
foo()
ƒ num(){return num +'|'+this.num}
foo()()
"function num(){return num +'|'+this.num}|2"
题4
test();
function test() {console.log(2)}
var test = function() {console.log(1)};
2
test();
var test = function() {console.log(1)};
function test() {console.log(2)}
2