ws3

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);
  1. 数组扁平化处理
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;jarray[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. 判断字符串中出现次数最多的字符,并统计其次数
// 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. 数组去重
    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));
}

你可能感兴趣的:(ws3)