1、方法封装(回调函数和扩展原型链)
//js中替换所有replaceAll
var str = 'AbcdEfGaaHiajkLmNaobbpaq';
document.write("原字符串:" + str + "<br>");
console.log(String)
// 法1函数回调
var newStr = replaceAll('a', 'b');
function replaceAll(oldStr, newStr)
{
while(str.indexOf(oldStr) > -1)
{
str = str.replace(oldStr, newStr);
}
return str;
}
document.write("新字符串:" + newStr + "<br>");
// 法2 扩展原型链s
String.prototype.replaceAll = (oldStr, newStr) =>
{
while(str.indexOf(oldStr) > -1)
{
str = str.replace(oldStr, newStr);
}
return str;
}
var newStr = str.replaceAll('b', 'a');
document.write("新字符串:" + newStr + "<br>");
console.log(newStr)
//大写变小写,小写变大写
var string = 'AbcdEfGaaHiajkLmNaobbpaq';
document.write("<br>原字符串:" + string + "<br>");
// 法1
function switchStr()
{
var tempStr = '';
for(let i = 0; i < string.length; i++)
{
string[i] >= "a" && string[i] <= "z" ? tempStr += string[i].toLocaleUpperCase() : tempStr += string[i].toLocaleLowerCase();
}
return tempStr;
}
var newString = switchStr();
document.write("新字符串:" + newString + "<br>")
// 法2
String.prototype.switchStr = () =>
{
var tempStr = '';
for(let i = 0; i < string.length; i++)
{
string[i] >= "a" && string[i] <= "z" ? tempStr += string[i].toLocaleUpperCase() : tempStr += string[i].toLocaleLowerCase();
}
return tempStr;
}
var newString = string.switchStr();
document.write("新字符串:" + newString + "<br>")
console.log(newString)
2、排序法
var arr = [2, 6, -2, 99, 67, -35, 0, 44, 0];
var bubbleSortCount = 0;
var quickSortCount = 0;
//排序--冒泡排序法
document.write("<br>原数组:" + arr)
function ascSort(a, b){
return a - b > 0;
}
function decSort(a, b){
return a - b < 0;
}
function bubbleSort(array){
for(let i = 0; i < array.length; i++)
{
for(let j = i + 1; j < array.length; j++)
{
bubbleSortCount++;//记录冒泡排序循环次数
if(decSort(array[i], array[j]))//升降序只需更改函数名
{
var temp = array[j];
array[j] = array[i];
array[i] = temp;
}
}
}
return array;
}
document.write("<br>冒泡排序降序数组:" + bubbleSort(arr) + '<br>循环次数:' + bubbleSortCount)
//排序--快速排序法
function quickSort(array){
if(array.length <= 1){
return array;
}
var left = [];
var right = [];
var mid = [];
var newArr = [];
var mediantIndex = Math.floor(array.length / 2);
var mediant = array[mediantIndex];
for(let i = 0; i < array.length; i++)
{
quickSortCount++;//记录快速排序循环次数
if(decSort(array[i], mediant))//升降序更改函数名
{
left.push(array[i]);
}
else if(ascSort(array[i], mediant)){
right.push(array[i]);
}
else{
mid.push(array[i]);//中间必须单独列出来
}
}
left = quickSort(left);
right = quickSort(right);
array = [];
for(let i = 0; i < left.length; i++)
{
array.push(left[i]);
}
for(let i = 0; i < mid.length; i++)
{
array.push(mid[i]);
}
for(let i = 0; i < right.length; i++)
{
array.push(right[i]);
}
return array;
}
document.write("<br>快速排序升序数组:" + quickSort(arr) + '<br>循环次数:' + quickSortCount)
3、map和forEach的区别
map()返回一个新的数组,按照原始数组元素顺序依次处理元素。不会对空数组进行检测
forEach()方法用于调用数组的每个元素,将元素传给回调函数。
4、作用域
var a = 10;
function A(){ var a = 20;}
A(); console.log(a)//输出10,若要获取方法里面的a的值,则可以把a前面的var去掉
变量前面不加var,默认为全局变量
尽量使用局部变量
4、递归
递归:方法自己调用自己,必须要有终止条件