继续刷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();
这个网站面向对象最后几客都很好,值得去看看