判断回文字符串:
如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是 palindrome
(回文)。
思路:使用正则去掉不相关符号后,将字符串分割(字符串的 spilt()
方法)为数组,再将得到的数组翻转(数组的 reverse()
方法)后组合为新字符串,最后判断新、旧字符串是否相等。
-
split()
方法用于把一个字符串分割成字符串数组。 -
reverse()
方法用于颠倒数组中元素的顺序。
function palindrome(str) {
// 先后去除空格和非数字字母的字符
var newStr = str.replace(/\s/g,"").replace(/[^a-zA-Z0-9]/g,"").toLowerCase();
//判断翻转后的字符串是否与原字符串相等
var reverStr = newStr.split("").reverse().join("");
if(reverStr === newStr){
return true;
}else{
return false;
}
}
句中单词首字母大写其余小写
确保字符串的每个单词首字母都大写,其余部分小写。像 'the' 和 'of' 这样的连接符同理。
思路:
- 使用字符串分割将长句分为字符串数组1,接着使用双重循环。第一重循环将数组1的每一项字符串分割为数组2,第二重循环是将数组2的首项大写,其余项小写。最后使用数组方法拼接为长句字符串。
function titleCase(str) {
var arr1=str.split(" ");//拆分字符串为数组
var arr2;
var newstr;
for(var i=0; i < arr1.length;i++){
arr2=arr1[i].split("");
arr2[0] = arr2[0].toUpperCase();
for(var j=1;j < arr2.length;j++){
arr2[j] = arr2[j].toLowerCase();
}
arr1[i] = arr2.join("");
}
newstr = arr1.join(" ");
return newstr;
}
- 将长句字符串全部转化为小写,再将其首字母转为大写。
function titleCase(str) {
// 请把你的代码写在这里
var newStr=str.toLowerCase().split(" ").map(function(item){
return item[0].toUpperCase()+item.slice(1);
}).join(" ");
return newStr;
}
将数组按照制定长度进行分组
把一个数组 arr
按照指定的数组大小 size
分割成若干个数组块。
例如: chunk([1,2,3,4],2)=[[1,2],[3,4]]
;
chunk([1,2,3,4,5],2)=[[1,2],[3,4],[5]]
;
思路:声明一个空数组,然后将分割后的数组追加到该数组上。分割数组用 Array.slice()
方法。
function chunk(arr, size) {
var newArr=[];
for(var i=0;i<arr.length;i=i+size){ // 每次循环增加分割数组的长度个
newArr.push(arr.slice(i,i+size));
}
return newArr;
}
比较字符串
如果数组第一个字符串元素包含了第二个字符串元素的所有字符,函数返回true。
举例,["hello", "Hello"]
应该返回 true
,因为在忽略大小写的情况下,第二个字符串的所有字符都可以在第一个字符串找到。
function mutation(arr) {
for(var j=0;j<arr[1].length;j++){
if(arr[0].toLowerCase().indexOf(arr[1].toLowerCase()[j])===-1){
return false;
}
}
return true;
}
indexOf()
方法可返回某个指定的字符串值在字符串中首次出现的位置。如果要检索的字符串值没有出现,则该方法返回 -1。(此方法对大小写敏感)
过滤数组假值
删除数组中的所有假值。
在JavaScript中,假值有 false
、null
、0
、""
、undefined
和 NaN
。
function bouncer(arr) {
var newArr=arr.filter(function(item){
return Boolean(item);
});
return newArr;
}
filter()
方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。filter()
不会对空数组进行检测。filter()
不会改变原始数组。
去掉数组中指定项
第一个参数是待摧毁的数组,其余的参数是待摧毁的值。
思路:将数组中的数字和后面的参数进行一一匹配,不相等则返回,相等则不返回。
方法:算法类似过滤因此可以使用 filter
函数,将数组中的数字过滤。
使用 arguments
来进行参数的遍历。
function destroyer(arr) {
var arr_arg = arguments;
for(var i = 1; i < arr_arg.length; i++){
arr = arr.filter(function(val){
return arr_arg[i] !== val;
});
}
return arr;
}
用for循环将数组中的数字与参数进行匹配,除了第一个参数(为数组)。另一种简单方法
数组排序并找出元素索引
先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。
举例:where([1,2,3,4], 1.5) 应该返回 1。因为1.5插入到数组[1,2,3,4]后变成[1,1.5,2,3,4],而1.5对应的索引值就是1。
function where(arr, num) {
arr.push(num);
arr.sort(function(a,b){
return a-b;
});
return arr.indexOf(num);
}
-
push()
方法可向数组的末尾添加一个或多个元素,并返回新的长度。 -
sort()
方法用于对数组的元素进行排序。-
如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
-
如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
- 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
- 若 a 等于 b,则返回 0。
- 若 a 大于 b,则返回一个大于 0 的值。
-
-
indexOf()
方法可返回某个指定的字符串值在字符串中首次出现的位置。
凯撒密码
下面我们来介绍风靡全球的凯撒密码Caesar cipher
,又叫移位密码。
移位密码也就是密码中的字母会按照指定的数量来做移位。
一个常见的案例就是ROT13密码,字母会移位13个位置。由'A' ↔ 'N', 'B' ↔ 'O',以此类推。
function rot13(str) {
var arr=[];
var num;
for(var i=0;i<str.length;i++){
num=str[i].charCodeAt();
if(num >= 65 && num <= 77){
num=num+13;
}else if(num > 77 && num < 91){
num=num-13;
}
arr.push(String.fromCharCode(num));
}
return arr.join("");
}
-
charCodeAt()
方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。字符串中第一个字符的下标是 0。如果 index 是负数,或大于等于字符串的长度,则 charCodeAt() 返回 NaN。 -
fromCharCode()
可接受一个指定的 Unicode 值,然后返回一个字符串。该方法是 String 的静态方法,字符串中的每个字符都由单独的数字 Unicode 编码指定。
网友评论