function Person(name) {
this.name = name;
}
Person.prototype.print = function() {
return this.name;
};
Person('abc');
const a = new Person('abc').print.call({});
console.log(a);
const fn = () => {
this.x = 'z';
};
const b = {x: 'y'};
fn.call(b);
console.log(b);
2.垂直居中
function Person(name) {
this.name = name;
}
Person.prototype.print = function() {
return this.name;
};
Person('abc');
const a = new Person('abc').print.call({});
console.log(a);
const fn = () => {
this.x = 'z';
};
const b = {x: 'y'};
fn.call(b);
console.log(b);
- 数组扁平化处理
flat
[1,2,3,4,[5,6,7,[8,9]]]
[1,2,3,4,5,6,7,8,9]
function flatten(arr) {
var result = []
for (var i = 0; i < arr.length; i++) {
console.log(arr[i])
if (Array.isArray(arr[i])) {
result = result.concat(flatten(arr[i])) // 如果是数组,则直接拼接到新数组
} else {
result.push(arr[i]) // 基本类型数据,直接push到新数组
}
}
return result
}
5.冒泡排序
function bubbleSort(array){
for (let i=array.length;i>0;i--){
for (let j=0;j<i;j++){
if (array[j]>array[j+1]){
var temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
return array;
}
console.log(bubbleSort([10,8,3,2,2,4,9,5,4,3]));
6.用js递归的方式写1到100求和
function num(n) {
if (n == 1) return 1;
return num(n - 1) + n;
}
let sum = num(100);
console.log(sum, "sum")
7.输出1-100以内的素数
// 求1-100的素数
function sushu () {
var arr = [];
// 1不是素数也不是和数 所以从2开始 2因为第二个循环不成立 所以直接push进去
for (var i = 2; i <= 100; i++) {
var flag = true; // 控制是否是素数的开关变量
// 使用i%j 如果值为0 证明不是素数 关闭开关变量 跳出循环
for (var j = 2; j < i; j++) {
if (i % j == 0) {
flag = false;
break;
}
}
// 开关变量为真时 证明i是素数 所以放到数组中
if (flag) {arr.push(i)}
}
return arr;
}
var sushuArr = sushu();
console.log(sushuArr)
8.给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
示例 4:
输入:s = "([)]"
输出:false
示例 5:
输入:s = "{[]}"
输出:true
let isValid = function(s) {
// 声明一个栈 stock
let stock = [], length = s.length;
// 字符串长度无法整除 2,游戏结束!
if(length % 2) return false;
// 遍历每个字符
for(let item of s){
switch(item){
// 遇到左括号,统统压入栈即可
case "{":
case "[":
case "(":
stock.push(item);
break;
// 遇到右括号,检查前一个括号是否是对应的左括号
// 是,对应左括号弹出栈即可
// 否,游戏结束!
case "}":
if(stock.pop() !== "{") return false;
break;
case "]":
if(stock.pop() !== "[") return false;
break;
case ")":
if(stock.pop() !== "(") return false;
break;
}
}
// 遍历逻辑通过,最终检查下栈的长度,若没有内容,代表真的是有效括号字符串
return !stock.length;
};
var s = "[{}}"
console.log(isValid(s))
- 判断字符串中出现次数最多的字符,并统计其次数
// 1.统计次数
var str = 'abdgdbcaethbganmugthaesqszaphfdvwd';
var obj = {};
// 创建了一个空的对象,存储字符串中的每个字符。属性:每个字符,属性值:该字符出现的次数
for (var i = 0; i < str.length; i++) {
// 遍历字符串
var chars = str.charAt(i);
// chars代表字符串的每一个字符
if (obj[chars]) {
obj[chars]++;
} else {
obj[chars] = 1;
}
// obj[chars]属性值:该字符出现的次数
// 如果已经存在,那么次数+1;否则赋值为1
}
console.log(obj);
// 输出对象obj,显示每个字符出现的次数
// 2.遍历对象,找出最大的次数
var max = 0;
var ch = '';
for (var k in obj) {
if (obj[k] > max) {
max = obj[k];
ch = k;
}
}
// k代表属性:每个字符
// obj[k]代表属性值:该字符出现的次数
// 将次数最多的字符赋值到ch
console.log('最多的字符是' + ch + ',次数为' + max);
- 数组去重
1. 计数排序变形,背代码
var a = [4,2,5,6,3,4,5]
unique(arr) {
for (var i = 0; i < arr.length; i++) {
for (var j = i + 1; j < arr.length; j++) {
if (arr[i] == arr[j]) {
//第一个等同于第二个,splice方法删除第二个
arr.splice(j, 1);
j--;
}
}
}
return arr;
}
2. 使用 Set(面试已经禁止这种了,因为太简单)
Array.from(new Set(a))
加了缓存后的Fibonacci 函数
var fibCache = [0,1,2];
function Fibonacci(i){
if(fibCache[i]) return fibCache[i];
return (fibCache[i] = Fibonacci(i-1) + Fibonacci(i-2));
}