JavaScript常见的算法(二)
1. 数组转换成字符串
已知数组var stringArray = [“This”,“is”,“Baidu”,“Campus”],Alert出”This is Baidu Campus”。
分析:
使用join() 方法,join() 方法用于把数组中的所有元素放入一个字符串。
代码:
var stringArray = ["This","is","Baidu","Campus"];
console.log(stringArray.join(" "));
2. 数组的倒排和降序排列
var numberArray = [3,6,2,4,1,5]; (考察基础 API)
(1) 实现对该数组的倒排,输出[5,1,4,2,6,3]
(2) 实现对该数组的降序排列,输出[6,5,4,3,2,1]
分析:
- 使用数组的reverse()和sort()方法
- reverse() 方法用于颠倒数组中元素的顺序。
- sort() 方法用于对数组的元素进行排序。
代码:
var numberArray = [3,6,2,4,1,5];
var a = numberArray.reverse();
console.log("倒排:"+a);
var b = numberArray.reverse(numberArray.sort());
console.log("降序排列:"+b);
3. 字符串中的部分替换(正则表达式)
将字符串 "<tr><td>{$id}</td><td>{$name}</td></tr>"
中的 {$id}
替换成 10
,
{$name}
替换成 Tony
(使用正则表达式)
分析:
1)使用replace()方法
2)replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
代码:
var a = "<tr><td>{$id}</td><td>{$name}</td></tr>";
console.log("替换前:"+a);
var b = a.replace(/{\$id}/g,10).replace(/{\$name}/g,'Tony');
console.log("替换后:"+b);
4. 成绩等级判定(条件运算符的嵌套)
利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
分析:
1) 条件运算符:(a>b)?a:b
2) 如果a>b为真,返回a;如果为假,返回b
代码:
const readline=require('readline-sync');
var grade=readline.question("请输入成绩:");
if(grade>100 || grade<0){
console.log("成绩输入无效!");
}else{
var str = (grade>=90)?'分,是A等':((grade<60)?'分,是C等':'分,是B等');
console.log(grade+str);
}
5. 字符串转换为驼峰表示法
已知有字符串 foo=”get-element-by-id”,写一个 function 将其转化成驼峰表示法”getElementById”
分析:
1) 首先将字符串切割成一个数组,利用循环将每个元素的首字母变成大写,最后再将数组转换成为字符串
2) split() 方法用于把一个字符串分割成字符串数组。
3) charAt() 方法可返回指定位置的字符。
4) toUpperCase() 方法用于把字符串转换为大写。
5) substr() 方法可在字符串中抽取从下标开始的指定数目的字符。
6) join() 方法用于把数组中的所有元素放入一个字符串。
代码:
var foo="get-element-by-id";
function trans(str){
var a=str.split("-");
for(var i=1;i<a.length;i++){
a[i]=a[i].charAt(0).toUpperCase()+a[i].substr(1,a[i].length-1);
}
str=a.join("");
return str;
}
console.log(trans(foo));
6. 数组合并,并且删除第二个元素
把两个数组合并,并删除第二个元素。var array1 = [‘a’,‘b’,‘c’];var bArray = [‘d’,‘e’,‘f’];
分析:
1) 将两个数组合并成为字符串,然后使用split()方法用","切割,再转换成为数组
2) 合并数组也可以使用concat()方法;
3) 使用splice()方法删除数组的第二个元素
代码:
var array1=['a','b','c'];
var bArray=['d','e','f'];
var a =Array.from((array1+","+bArray).split(","));
// var a = array1.concat(bArray);
console.log("合并后的数组:",a);
a.splice(1,1);
console.log("删除后的数组:",a);
7. 查找字符串第一个只出现一次的字符
找出字符串中第一个只出现一次的字符。输入一个非空字符串,输出第一个只出现一次的字符,如果不存在输出-1。 例如:输入:asdfasdfo 输出:o;输入:aabb 输出:-1;
分析:
1) 首先创建一个空对象obj,使用for循环将字符串的各个字符和各自的数量以键值对的形式存放在该对象中,如果该字符没有在对象中,则对应的值等于1,否则让对应的值加1
2) Object.values()方法获取字符,Object.keys() 获取对应的值
3) 获取字符,同时使用foeEach()遍历出对应的值等于1的字符,存放在一个空字符串中
4) 如果最后该字符串为空,则输出-1.否则输出第一个字符。
知识点:
1) forEach() 方法用于调用数组的每个元素,并将元素传递给回调函数。
1) Object.values()方法返回一个给定对象自身的所有可枚举属性值的数组,
2) Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组
代码:
const readline = require('readline-sync');
var n = readline.question("请输入一个非空字符串:");
if(n){
var s='';
var obj={};
for(var i=0;i<n.length;i++){
if(!obj[n[i]]){
obj[n[i]]=1;
}else{
obj[n[i]]++;
}
}
Object.values(obj).forEach((item,i)=>{
if(item==1){
s+=Object.keys(obj)[i];
}
});
if(!s){
s = -1;
}else{
s=s[0];
}
console.log(s);
}
8. 进制转化(十六进制转十进制)
写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。
例如:输入:0xA;输出:10
分析:
使用parseInt()函数进行进制的转换
知识点:
parseInt() 函数可解析一个字符串,并返回一个整数。
1) 语法:parseInt(string, radix)
2) 解释:radix表示要解析的数字的基数。该值介于 2 ~ 36 之间。如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。 如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。
代码:
const readline = require('readline-sync');
var a = readline.question("请输入一个十六进制的数:");
var b = parseInt(a,16);
console.log("该数的十进制表示为:",b);