js基础算法及面向对象之类
编辑时间:2021-09-26 作者:金满斗 浏览量:1055 来源:原创

继续刷https://chinese.freecodecamp.org/网站   注意里面的代码都是不科学的,很多js里已经有现成的函数了,这里是为了学习算法尽量用最低级的实现的

刷到单词大小写这题时。我按以前学的知识点用正则加两个循环完成,表面上应该是成功了啊,不晓得怎么通不过,代码先贴上来

function titleCase(str) {
  let myRegex = /\S+/g;
  let tab = str.match(myRegex);
  let nstr="";
  for(let i=0;i<tab.length;i++){
    for(let n=0;n<tab[i].length;n++){
        if(n==0) {
          nstr +=tab[i][n].toUpperCase()
        }else{
          nstr +=tab[i][n].toLowerCase()
        }
    }
    if(i<tab.length-1)nstr +=" ";
  }
  return nstr;
}
titleCase("I'm a little tea pot");

后来发现问题了,最后一个文本加空格了,这个是修复了

题:本挑战的输入参数为两个数组和一个索引值。将第一个数组中的所有元素依次复制到第二个数组中。请注意,你需要从第二个数组索引值为 n 的地方开始插入。最后,请返回插入元素后的数组。 作为输入参数的两个数组在函数执行前后应保持不变。

function frankenSplice(arr1, arr2, n) {
  let arr = arr2.slice();
  arr.splice(n,0,...arr1);
  return arr;
}
frankenSplice([1, 2, 3], [4, 5, 6], 1);

过滤数组中的假值
function bouncer(arr) {
  for(let i=0;i<arr.length;i++){
    if(Boolean(arr[i])===false){
      arr.splice(i,1);
      i--;
    }
  }
  return arr;
}
bouncer([7, "ate","","", "", false, 9]);

找出元素在排序后数组中的索引

写的有些啰嗦,先这样吧。

function getIndexToIns(arr, num) {
  //先排序
  let min =0;
  for(let i=0;i< arr.length-1;i++){
      for(let n=i+1;n<arr.length;n++){
          if(arr[i]>arr[n]){
              min = arr[n];
              arr[n] =  arr[i];
              arr[i] = min;
          }
      } 
  }
  //再插入
  let index =0 ;
  if(num <= arr[0]){
      arr.unshift(num);
  }else if(num >= arr[arr.length-1]){
      arr.push(num);
      index = arr.length-1;
  }else{
      for(let i=0;i< arr.length-1;i++){
      if(num>arr[i] && num<arr[i+1]){
         arr.splice(i+1,0,num);
         index = i+1;
         break;
      }else if(arr[i]==num){
         index = i;
         break;
      }
    }
  }
  return index;
}

getIndexToIns([10, 20, 30, 40, 50], 30);

比较字符串 具体要求看章节

function mutation(arr) {
let retnum =0;
let narr0 = arr[0].toLowerCase();
let narr1 = arr[1].toLowerCase();
  for(let n=0;n<narr1.length;n++){
      if(narr0.indexOf(narr1[n])!=-1){
        retnum++;
      }
  }
return (retnum==arr[1].length);
}
mutation(["Alien", "line"]);

分割数组
请编写一个函数,该函数将一个数组(第一个参数)拆分成若干长度为 size(第二个参数)的子数组,并将它们作为二维数组返回。
function chunkArrayInGroups(arr, size) {
  let rearr = [];
  //其实这算一个经典的派对自动换行题,打印分页就要
  let N = Math.floor(arr.length/size) ;
  let y = arr.length%size;
  for(let i=0;i< N;i++){
    rearr.push(arr.splice(0,size));
  }
  if(y!=0){ rearr.push(arr.splice(0,y));}
  return rearr;
}
chunkArrayInGroups(["a", "b", "c", "d"], 2);

使用 instanceof 验证对象的构造函数
凡是通过构造函数创建出的新对象,这个对象都叫做这个构造函数的 instance。 JavaScript 提供了一种很简便的方法来验证这个事实,那就是通过 instanceof 操作符。 instanceof 允许你将对象与构造函数之间进行比较,根据对象是否由这个构造函数创建的返回 true 或者 false
需要注意到的是这个 constructor 属性是对创建这个实例的构造函数的一个引用。 constructor 属性的一个好处是可以通过检查这个属性来找出它是一个什么对象

更改原型时,记得设置构造函数属性

凡是手动给新对象重新设置过原型对象的,都别忘记在原型对象中定义一个 constructor 属性:

了解对象的原型来自哪里  你可以使用 isPrototypeOf 方法来验证他们之间的关系:

继承,将子辈的原型设置为父辈的实例

给子类型(或者子类)设置 prototype。 例子
function Animal() { }
Animal.prototype = {
  constructor: Animal,
  eat: function() {
    console.log("nom nom nom");
  }
};
function Dog() { }
Dog.prototype = Object.create(Animal.prototype);
let beagle = new Dog();

这个网站面向对象最后几客都很好,值得去看看

来说两句吧