JS的初级脚本算法——个人笔记

全面解析:时延扩展与相干带宽、多普勒扩展与相干时间——无线通信基础 时延扩展与相干带宽 多径时延扩展与多径衰落 接收机所接收到的信号是通过不同的直射、反射、折射等路径到达接收机。由于电波通过各个路径的距离不同, 因而各条路径中发射波的到达时间不同,造成多径时延扩展。距离不同所以到达接收机的相位也不相同,不同相位的多个信号在接收端叠加, 如果同相叠加则会使信号幅度增强, 而反相叠加则会削弱信号幅度。 这样,接收信号的幅度将会发生急剧变化,就会产生多径衰落。 ... 阅读详情

JS的初级脚本算法



一、 JS 翻转字符串的方法

要求: reverseString("hello") 应该返回 "olleh".

首先我们需要使用JS的以下方法:

  1. split(’#’) 方法将字符串对象拆分为字符串数组,使用指定的分隔符字符串 # 来确定每次拆分的位置。 split()方法的相关内容
  2. reverse() 将阵列反转到位。第一个数组元素成为最后一个,最后一个数组元素成为第一个。 reverse()方法的相关内容
  3. join(’#’) 方法通过连接数组(或类数组对象)中的所有元素(由指定的分隔符字符串 # 分隔)来创建并返回新字符串。 join()方法的相关内容

代码如下:

function reverseString(str) {
    
/*首先将字符串拆分成数组;然后将该数组进行翻转,最后将数组合并为新的字符串*/
return str.split('').reverse().join('');
}



二、 JS 阶乘算法

要求: 计算所提供整数的阶乘。factorialize(10)应该返回 3628800.

我们可以直接使用递归的方法实现阶乘运算。

代码如下:

function factorialize(num) {
    
    if(num===0||num===1){
        return 1;
    }
    else{
        /* 递归调用该方法 */
        return num*factorialize(num-1);
    }
}



三、 JS 回文算法

要求: 如果给定的字符串是回文,返回true,反之,返回false
palindrome("race car") 应该返回 true.
palindrome("not a palindrome") 应该返回 false.

首先我们得了解回文的定义:palindrome(回文)是指一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样。这也就意味着我们翻转该字符串之后得到相同的字符串,于是我们可以采用翻转字符串的算法来辅助实现该算法,并且我们需要了解正则表达式。

正则表达式的相关内容

代码如下:

function palindrome(str) {
    //将原先的字符串里所有标点符号和空格去掉并转换为小写得到字符串init_str
    let init_str = str.replace(/[^0-9a-z]/gi,"").toLowerCase();
    //再将该字符串进行拆分、翻转、合并得到新的字符串new_str
    let new_str = init_str.split('').reverse().join('');
    
    if(init_str===new_str){
      //如果两个字符串相等说明是回文
         return true;
    }else{
         return false;
    }
}



四、 JS 设置首字母大写算法

要求: 返回一个字符串,确保字符串的每个单词首字母都大写,其余部分小写。即titleCase("sHoRt AnD sToUt") 应该返回 “Short And Stout”.

首先我们需要使用JS的以下方法:

  1. slice(begin_index[,end_index]) 方法提取字符串从begin_indexend_index位置上的部分,默认end_index是字符串结尾处,并返回一个新的字符串,且不会改动原字符串。 String.slice()方法的相关内容
  2. toUpperCase()方法将字母变成大写toUpperCase()方法的相关内容
  3. toLowerCase()方法将字母变成小写toLowerCase()方法的相关内容

代码如下:

function titleCase(str) {
    //将字符长串根据空格拆分成短字符串
    let strarr=str.split(" ");
    let newstr="";
    for(let i=0;i<strarr.length;i++){
     //将短字符串的首字母变成大写,其余字母变成小写
     strarr[i]=strarr[i].slice(0,1).toUpperCase()+strarr[i].slice(1).toLowerCase();
    }
    newstr=strarr.join(" ");
    return newstr;
}



五、 JS 寻找最长的单词算法

要求: 返回提供的句子中最长的单词的长度。即 findLongestWord("What is the average airspeed velocity of an unladen swallow")应该返回 8.

首先我们需要使用到length方法求出字符串或是字符数组的长度。

代码如下:

function findLongestWord(str) {
    let strarr= str.split(" ");
    let strmax=" ";
    //strarr是字符数组,用length方法求出的是数组的长度
    for(let i=0;i<strarr.length;i++){
        //strmax和strarr[i]是字符串,用length方法求出的是字符串的长度
        if(strmax.length<=strarr[i].length){
            strmax=strarr[i];
        }
    }
    //返回最长单词长度
    return strmax.length;
}



六、 JS 寻找数组最大值算法

要求: 请分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新的数组。即largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]])应该返回 [27,5,39,1001].

我们需要使用双重for循环遍历数组实现该算法。

代码如下:

function largestOfFour(arr) {
    let largenumber=[];   //定义一个新数组存储每个子数组的最大值
    let maxnumber=0;   //定义一个变量来求出子数组的最大值
    for(let i=0;i<arr.length;i++){
       for(let j=0;j<arr[i].length;j++){
           if(maxnumber<arr[i][j]){
               maxnumber=arr[i][j];
           }
       }
       largenumber.push(maxnumber);   //将最大值添加到数组中
       maxnumber=0;    //重新置为0,进行下一轮的比较
    }
    return largenumber;
}



七、 JS 确认末尾字符算法

要求: 检查一个字符串(str)是否以指定的字符串(target)结尾。如果是,返回true;如果不是,返回false。即
confirmEnding("Bastian", "n") 应该返回 true.
confirmEnding("Connor", "n") 应该返回 false.

我们需要使用到endsWith(searchString[,length])方法,它用来判断当前字符串是否是以另外一个给定的子字符串searchString“结尾”的,length作为字符串的长度可选择使用,然后根据判断结果返回 truefalse

endsWith()方法的相关内容

代码如下:

方法一:

function confirmEnding(str, target) {
    if(str.endsWith(target)){
        return true;
    }else{
        return false;
    }
}

方法二:

function confirmEnding(str, target) {
   for(let i=1;i<=target.length;i++){
       //从原字符串str的尾部开始和目标字符串target的尾部进行逆序匹配
       if(str[str.length-i]!==target[target.length-i]){
           return false;
       }
   } //如果一直匹配成功即返回true
   return true;
}



八、 JS 字符串截取算法

要求: 如果字符串的长度比给定的参数num长,则把多余的部分用...来表示。插入到字符串尾部的三个点号也会计入字符串的长度。然而,如果指定的参数num小于或等于3,则添加的三个点号不会计入字符串的长度。即
truncate("A-tisket a-tasket green and yellow", 11) 应该返回 “A-tisket…”.
truncate("A-", 1) 应该返回 “A…”.

代码如下:

function truncate(str, num) {
    let newstr="";
    if(str.length>num){
        if(num<=3){
            newstr=str.slice(0,num)+"...";
        }else{
            newstr=str.slice(0,num-3)+"...";
        }
    }else{
        //如果num值大于字符串长度即返回str本身
        newstr=str;
    }
    return newstr;
}



九、 JS 数组分割算法

要求: 把一个数组arr按照指定的数组大小size分割成若干个数组块。即chunk([1,2,3,4,5],2)=[[1,2],[3,4],[5]]。

代码如下:

function chunk(arr, size) {
    let newarr=[];
    for(let i=0;i<arr.length;i+=size){
        //从数组arr中依次截取size个元素添加到newarr中
        newarr.push(arr.slice(i,i+size));
    }
    return newarr;
}

注意: 该算法使用的 slice()方法 和此前在String类型下使用的方法是不同的方法,此处的slice(begin[,end])方法返回一个新的数组对象,这一对象是一个由 beginend 决定的原数组的浅拷贝(包括 begin,不包括end)。原始数组不会被改变。

Array.slice()方法的相关内容



十、 JS 数组截断算法

要求: 返回一个数组被截断n个元素后还剩余的元素,从索引0开始截断。即slasher([1, 2, 3], 2) 应该返回 [3].

首先我们得了解 splice() 方法,它通过删除或替换现有元素或在适当位置添加新元素来更改数组的内容。

MDN网站下的splice()方法相关内容

代码如下:

function slasher(arr, howMany) {
    if(arr.length>howMany){
        //截断数组arr中的0到howMany部分
        arr.splice(0,howMany);
    }else{
        //如果howMany大于数组长度,即截断所有元素
        arr.splice(0);
    }
    return arr;
}



十一、JS 数组查询算法

要求: 如果数组第一个字符串元素包含了第二个字符串元素的所有字符,则函数返回true。即mutation(["hello", "Hello"]) 应该返回 true.
mutation(["hello", "hey"]) 应该返回 false.

首先我们得了解 indexOf() 方法,它返回字符串第一次出现的指定值的调用对象内的索引。如果未找到该值,则返回 -1。

indexOf()方法的相关内容

代码如下:

function mutation(arr) {
    //先将两个字符串转换成小写
    let str1=arr[0].toLowerCase();
    let str2=arr[1].toLowerCase();
    //对第二个字符串进行遍历
    for(let i=0;i<str2.length;i++){
        //如果第二个字符串中的某一元素不在第一个字符串中,即返回false
        if(str1.indexOf(str2[i])===-1){
            return false;
        }
    }
    //如果匹配均成功,即返回true
    return true;
}



十二、JS 删除数组中特定值的算法

要求: 删除数组中的所有的假值(在JavaScript中,假值有falsenull0""undefinedNaN。),即bouncer([7, "ate", "", false, 9]) 应该返回 [7, "ate", 9].

首先我们得了解Boolean对象,它是布尔值的对象包装器。 Boolean对象的相关内容

然后需要了解 filter() 方法,它创建一个新数组,其中包含通过所提供函数实现的测试的所有元素。即这是一个可以进行筛选的方法。 filter()方法的相关内容

代码如下:

方法 一:

function bouncer(arr) {
    //将数组中的元素进行筛选,filter方法里的参数为回调函数
    return arr.filter(function(e){
        //返回true即将该元素回传给数组arr
        return Boolean(e);
    });
}

方法二:

function bouncer(arr) {

    return arr.filter(T=>Boolean(T)===true)
}



十三、JS 去除数组中任意多个值的算法

要求: 实现一个 destroyer 函数,第一个参数是初始数组,后跟一个或多个参数。从初始数组中删除与这些参数具有相同值的所有元素。即destroyer([1, 2, 3, 5, 1, 2, 3], 2, 3) 应该返回 [1, 5, 1].

同样我们需要使用到 filter() 方法进行算法实现,而且我们需要了解 arguments对象,它是一个对应于传递给函数的参数的类数组对象。但它不是一个Array,除了length属性和索引元素之外没有任何Array属性。

如果调用的参数多于正式声明接受的参数,则可以使用arguments对象。这种技术对于可以传递可变数量的参数的函数很有用。

argument对象的相关内容

代码如下:

function destroyer(arr) {
    //将arguments转化为真正的数组
    let argArr = Array.from(arguments);
    //对数组中的元素进行筛选并定义了一个回调函数
    arr=arr.filter(function(num){
        //对数组进行遍历和剩下的参数进行匹配
       for(let i=1;i<argArr.length;i++){
           if(num === argArr[i]){
               return false;
           }
       } 
       //如果都匹配失败了,说明数组中没有这个值,即返回真
       return true;
    });
    return arr;
}



十四、JS 数组排序并插入值算法

要求: 先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。where([5, 3, 20, 3], 5) 应该返回 2.

首先我们得了解 soft() 方法,它对数组中的元素进行排序,并返回已排序的数组。 soft()方法的相关内容

代码如下:

function where(arr, num) {
    //对数组进行顺序排序
    arr=arr.sort(function(a,b){
        return a-b;
    });
    //定义指定位置index
    let index=0;
    for(let i=0;i<arr.length;i++){
        if(num<=arr[i]){
            //当num恰好小于或等于arr[i]时,在i位置上插入元素num
            index=i;
            arr.splice(index,0,num);
            return index;
        }
    }
    //插入位置为数组最后一个时即返回数组长度
    return arr.length;
}



十五、JS 位移密码算法

要求: 凯撒密码Caesar cipher,又叫移位密码。移位密码也就是密码中的字母会按照指定的数量来做移位。一个常见的案例就是ROT13密码,字母会移位13个位置。由’A’ ↔ ‘N’, ‘B’ ↔’O’,以此类推。写一个函数,实现输入加密字符串,输出解密字符串。即rot13("SERR PBQR PNZC") 应该解码为 "FREE CODE CAMP"

首先我们得了解以下JS的以下方法:

  1. charCodeAt(index) 方法,它返回0到65535之间的整数,表示给定索引处的UTF-16代码单元。如果返回NAN,则index超出范围。 charCodeAt()方法的相关内容
  2. fromCharCode(num) 方法,它返回从指定的UTF-16代码单元序列创建的字符串,num是一系列UTF-16代码单元的数字,范围介于0到65535(0xFFFF)之间。 fromCharCode()方法的相关内容

由此我们可以看出,以上两种方法是互逆的,所以可以进行配合使用。

代码如下:

function rot13(str) {
    let start="A".charCodeAt(0);   //定义字符的开始位置
    let end="Z".charCodeAt(0);   //定义字符的结束位置
    let newstr=[];     //定义一个字符数组,因为无法对字符串中的元素进行修改
    for(let i=0;i<str.length;i++){
        let index=str.charCodeAt(i);    //定义该字符的位置
        if(index>=start&&index<=end){           //只有当该字符在A-Z中才会进行改变
            if(end>=index+13){
                //当该字符往后移位13后仍在A-Z中即添加到字符数组中
                newstr.push(String.fromCharCode(index+13));
            }else {
                //当该字符往后移位13后在A-Z外面即需要重定位在A开始移位,再添加到字符数组中
                newstr.push(String.fromCharCode(start+index+12-end));
            }
        }else{
            //如果该字符不在A-Z中即返回该字符
            newstr.push(str[i]);
        }
    }
    //最后返回的是字符串,于是使用join('')方法进行合并
    return newstr.join("");
}
检测头篇 | 手把手教你如何去更换YOLOv8的检测头为ASFF_Detect 自适应空间特征融合(ASFF)的主要原理旨在解决单次检测器中不同尺度特征的不一致性问题。具体来说,ASFF通过动态调整来自不同尺度特征金字塔层的特征贡献,确保每个检测对象的特征表示是一致且最优的。本文所做出的改进是将YOLOv8的检测头更换为ASFF_Detect。🌈 阅读详情

相关推荐

基于纯js脚本的数学公式计算源码

基于纯js脚本的数学公式计算工具,可以在客户端计算复杂的数学公式,对b/s报表公式计算有一定得帮助

Python常见的脚本基础运算和算法

1、冒泡排序 lis = [56,12,1,8,354,10,100,34,56,7,23,456,234,-58] def sortport(): for i in range(len(lis)-1): for j in range(len(lis)-1-i): if lis[j] > lis[j+1]: l...

python学习者的博客 1132

1.03H全扩展服务端免费.7z

2019最新奇迹1.03H全扩展服务端下载

js初级脚本算法

1翻转字符串算法挑战 先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串function reverseString(str){ str = str.split('').reverse().join(''); return str; } reverseString("hello");2阶乘算法 如果用字母n来代表一个整数,阶乘代表着所有小于或

键盘哥的博客 780

超实用的JS常用算法详解(推荐)

本文主要介绍常用的数组方法和字符串方法。希望对大家有帮助,有不懂的可以在下方留言,大家一起讨论学习!

CRMEB小程序商城的博客 8284

js常用十种算法

① 冒泡排序   作为最简单的排序算法之一,冒泡排序给我的感觉就像Abandon在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉。冒泡排序还有一种优化算法,就是立一个flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。但这种改进对于提升性能来说并没有什么太大作用。   JavaScript代码实现  function bubbleSort(arr) { var len ...

qq_42228691的博客 5580

【一行流】JavaScript初级脚本算法编程实战(w3cschool)

【一行流】JavaScript初级脚本算法编程实战(w3cschool)前言1.翻转字符串算法挑战2.阶乘算法挑战3.回文算法挑战4.寻找最长的单词算法挑战5.设置首字母大写算法挑战6.寻找数组中的最大值算法挑战7.确认末尾字符算法挑战8.重复操作算法挑战9.字符串截取算法挑战10.数组分割算法挑战11.数组截断算法挑战12.数组查询算法挑战13.删除数组中特定值算法挑战14.去除数组中任意多个值...

qq_44589977的博客 778

javascript初级脚本算法

初级脚本算法翻转字符串算法 翻转字符串算法 function reverseString(str) { str = str.split('').reverse().join(''); return console.log(str); } reverseString("hello");

不丶甜的博客 376

JavaScript初级脚本算法

本人今年毕业自学前端到现在两个月,按照一般学习路径从html和css到javascript,最近在W3C和FreeCodeCamp上做脚本算法挑战(两个地方的算法题都是一样的)。在javascript这部分中,刚开始的时候是看书,主要针对javascript高级程序设计第三版中的前七章,好多属性和方法都是大概知道是什么意思,但是用起来就完全不是那么回事,因此通过这些算法挑战可以让自己熟悉一下这些内

ljxyaly的博客 2655

W3Cschool 初级脚本算法

初级脚本算法 翻转字符串算法挑战 function reverseString(str) { return str.split('').reverse().join(''); } reverseString("hello"); 阶乘算法挑战 function factorialize(num) { let y = 1; for(let i = 1; i &lt;= num...

qq_43389371的博客 316

javascript中级脚本算法

javascript中级脚本算法区间求值算法找出数组间差异算法数字转罗马数字对象搜索算法挑战字符串查询替换算法字符串移动插入算法字符配对算法字符串查询补充算法输入检查算法数组去重算法html符号转实体算法 区间求值算法 function sumAll(arr) { var arrMin = Math.min(arr[0], arr[1]), arrMax = Math.max(arr[0],...

不丶甜的博客 281

W3Cschool JavaScript脚本算法编程实战 初级脚本算法

初级脚本算法 1. 翻转字符串算法挑战 实战翻转字符串算法 你可以先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,然后把数组转化成字符串。 提示:你的结果必须得是一个字符串 function reverseString(str) { var newStr=str.split(""); newStr.reverse(); newStr=newStr.join(""); return newStr; } reverseString("hello"); 2. 阶

weixin_43231912的博客 218

W3Cschool初级脚本算法难题解析——JS对数组和字符串的常见操作

最近无聊刷了一波W3Cschool上的前端课程,三天获得了前端基础编程实战课程通关证书(共226关)因为本科毕业设计做过前端所以比较容易完成。但对脚本算法是一窍不通,今天花了一点时间做了脚本算法编程实战课程的初级脚本算法。遇到了一些难点,不过有幸逐一解决了,每当解决一个算法的时候,感觉整个心情都舒畅起来。闲话结束,进入实战。 算法:1.寻找最长的单词 实验要求:返回提供的句子中最长的单词...

涵盖了计算机专业基础知识、数学建模相关实践、复杂网络论文研究、LeetCode算法刷题经验、C语言开发经验、前端Vue、React框架开发实战相关知识 305

js公式的计算

// 公式计算 //formula.js export function getResult(equation) { // console.log(equation); let temp = ''; //临时保存 let operation = []; //存放运算符(函数名称) let bracket = []; //存放左括号 let number = []; //存放运算参数 let count = []; //存放运算符参数个数 for (let i = 0; i < equat

m0_51282855的博客 1679

JavaScript常用算法(面试)------Sestid

目录 (一)快速排序算法 (二)希尔排序,也称递减增量排序算法 (三)选择排序算法 (四)归并排序算法 (五)冒泡排序算法 (六)插入排序算法 (七)二分插入排序算法 (一)快速排序算法 1.1: 先从数列中取出一个数作为“基准”。 1.2: 分区过程:将比这个“基准”大的数全放到“基准”的右边,小于或等于“基准”的数全放到“基准”的左边。 1.3: 再对左右区间重复第二步,...

Sestid的博客 1297

JavaScript中的常见算法

服了,看算法头都大了!!!!!!

weixin_73810008的博客 2390

js常用算法有哪些,javascript算法案例

冒泡排序是一种简单的比较排序算法。它重复地比较相邻的元素,并将顺序错误的相邻元素交换位置,直到整个序列排序完成。

2301_79533350的博客 657

JS原生——计算器(非eval,附源码)

带括号的加减乘除运算、清空、清空末位、历史记录、字体切换、主题切换。主要利用弹栈的思想实现:定义calculateExpression函数,接受一个表达式作为参数。如果表达式中包含了括号,则使用递归的方式处理括号内的子表达式。具体来说,首先找到左括号的位置left和右括号的位置right,然后将括号内的子表达式提取出来,并调用自身并传入子表达式作为参数,得到子表达式的计算结果subResult。

前端小白一枚 2573

Javascript常见算法详解

在JavaScript(JS)中,常见的算法涵盖了多个领域,从基础的数组操作到更复杂的排序、搜索和数据结构算法

警警的博客 1928
上一篇: Ubuntu 16.04以及Ros系统的安装
下一篇: ROS进行时--问题小汇总(一)
不乏希望
博客等级 码龄8年 75粉丝 65原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值