(1)先把字符串转化成数组,再借助数组的reverse方法翻转数组顺序,最后把数组转化成字符串。
function reverseString(str) {
var a=str.split("");//
a.reverse();
var c=a.join("");
return c;
}
reverseString("hello");//"olleh"
(2)如果一个字符串忽略标点符号、大小写和空格,正着读和反着读一模一样,那么这个字符串就是palindrome(回文)。注意你需要去掉字符串多余的标点符号和空格,然后把字符串转化成小写来验证此字符串是否为回文。
function palindrome(str) {
// 请把你的代码写在这里
var aa=str.toLowerCase();
var c=aa.split("");
c = c.filter(function(val){
return val != ",";
}); c = c.filter(function(val){
return val != ".";
});c = c.filter(function(val){
return val != " ";
});c = c.filter(function(val){
return val != "(";
});c = c.filter(function(val){
return val != ")";
});c = c.filter(function(val){
return val != "_";
});c = c.filter(function(val){
return val != "-";
});
str=c.join("");
c.reverse();
var d=c.join("");
if(str==d){
return true;
}
return false;
}
palindrome("0_0 (: /-\ :) 0-0");
(3)找出最长单词—在句子中找出最长的单词,并返回它的长度。[写这道题时出现的错误a[i].length出现在if的条件中容易出错]
function findLongestWord(str) {
// 请把你的代码写在这里
var a=str.split(" ");
var b=[];
for(var i=0;i<a.length;i++)
{
b[i]=a[i].length;
}
b.sort(function(a, b) {
return b-a;
});
return b[0];
}
findLongestWord("The quick brown fox jumped over the lazy dog");
(4)句中单词首字母大写确保字符串的每个单词首字母都大写,其余部分小写。像'the'和'of'这样的连接符同理。【写这道题的时候出现的错误是把shift()当成字符串的方法在用,而不是数组】
function titleCase(str) {
// 请把你的代码写在这里
var c=str.split(" ");
var b=[];
var d=[];
for(var i=0;i<c.length;i++)
{ b[i]=c[i].toLowerCase();//转换成小写字母
d=b[i].split("");//字符串转数组
d[0]=d[0].toUpperCase();//转换成大写字母
b[i]=d.join("");//数组转字符串
}
b=b.join(" ");
return b;
//return c[0].toLowerCase();
}
titleCase("I'm a little tea pot");
还有一种通过截取方法substr(索引值,索引值)来完成
<script type="text/javascript">
function replaceChat(source,pos,newChar){
if(pos<0||pos>=source.length||source.length==0){
return "invalid parameters...";
}
var iBeginPos= 0, iEndPos=source.length;
var sFrontPart=source.substr(iBeginPos,pos);
var sTailPart=source.substr(pos+1,source.length);
var sRet=sFrontPart+newChar+sTailPart;
return sRet;
}
alert(replaceChat("happy",1,"b"));
</script>
(5)大数组中包含了4个小数组,分别找到每个小数组中的最大值,然后把它们串联起来,形成一个新数组。
function largestOfFour(arr) {
var a=0;
var c=[];
for(var i=0;i<arr.length;i++)
{
for(var j=0;j<arr.length;j++){
if(arr[i][j]>a){
a=arr[i][j];
}
}
c[i]=a;
a=0;
}
return c;
}
largestOfFour([[13, 27, 18, 26], [4, 5, 1, 3], [32, 35, 37, 39], [1000, 1001, 857, 1]]);
小贴士:substr() 方法抽取一个字符串中从指定位置开始到指定字符数的字符。具体址https://developer.mozilla.org/zhCN/docs/Web/JavaScript/Reference/Global_Objects/String/substr
(6)判断一个字符串(str)是否以指定的字符串(target)结尾。如果是,返回true;如果不是,返回false。这里的易错点是substr里边的参数。function confirmEnding(str, target) {
// 请把你的代码写在这里
var c=str.substr((str.length-target.length),str.length-1);
return c==target;
}
confirmEnding("Bastian", "n");
(7)重复一个指定的字符串 num次,如果num是一个负数则返回一个空字符串。(字符串的操作知识查询:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String)
function repeat(str, num) {
// 请把你的代码写在这里
if(num<0)
return "";
var a="";
for(var i=1;i<num+1;i++)
{
a+=str;
}
return a;
}
repeat("abc", 3);
小贴士:slice() 方法返回一个字符串中从指定位置开始到指定位置的字符,并返还新字符串。具体地址https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/slice
(7)截断字符串如果字符串的长度比指定的参数num长,则把多余的部分用...来表示。切记,插入到字符串尾部的三个点号也会计入字符串的长度。但是,如果指定的参数num小于或等于3,则添加的三个点号不会计入字符串的长度。考虑slice第二个参数时+1,那样才能完美截取。
function truncate(str, num) {
var a="...";
var b="";
if(str.length>num){
if(num>3)
{b=str.slice(0,num-3);
b+=a;
}
else{
b=str.slice(0,num);
b+=a;
}
}else{
b=str;
}
return b;
}
truncate("A-tisket a-tasket A green and yellow basket", 11);
(8)猴子吃香蕉, 分割数组(猴子吃香蕉可是掰成好几段来吃哦)把一个数组arr按照指定的数组大小size分割成若干个数组块。例如:chunk([1,2,3,4],2)=[[1,2],[3,4]];chunk([1,2,3,4,5],2)=[[1,2],[3,4],[5]];
function chunk(arr, size) {
// 请把你的代码写在这里
var b=[];
var c=[];
var d=arr;
for(var a=0;a+size<=arr.length;a+=size){
c=arr.slice(a,a+size);
b.push(c);
}
if(d.length%size!=0){//浪费时间的点在与判断,拿不准a最后的值的作用
c=arr.slice(a,d.length);
b.push(c);
}
return b;
}
chunk(["a", "b", "c", "d"], 2);
感悟:要将思路记录下来,如果修改代码要将思路阐述清楚。有描述的东西才好修改。另外slice的连个参数,一个是begin,一个是end。截取的数组索引从0开始计算,元素包含begin位置的元素,不包含end位置的元素。也可以只有一个参数begin,代表截取从begin一直到数组结束的所有元素。(9)如果数组第一个字符串元素包含了第二个字符串元素的所有字符,函数返回true。
function mutation(arr) {
var a=arr[0].toLowerCase();
var b=arr[1].toLowerCase();
var c=a.indexOf(b);
for(var i=0;i<b.length;i++)
{
if(a.indexOf(b[i])==-1){
return false;}
}
return true;
}
mutation(["hello", "hey"]);
indexOf() 方法返回调用 String 对象中第一次出现的指定值的索引,开始在 fromIndex进行搜索。具体知识在https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/indexOf。(10)(真假美猴王)过滤数组假值
删除数组中的所有假值。在JavaScript中,假值有false、null、0、""、undefined 和 NaN。
function bouncer(arr) {
// 请把你的代码写在这里
function isBigEnough(value) {
var a=new Boolean(value);
var b=0;
if(a.toString()=="true"){
b=5;
}
return b>0;
}
var b=arr.filter(isBigEnough);
return b;
}
bouncer([7, "ate", "", false, 9]);
写代码感悟:首先一定有一个大致的思路,然后要看https://developer.mozilla.org/zh-CN/docs/Web/JavaScript文档,一定要实践一下,才可能快速理解。单看文字不深刻。然后就是对于属性方法适用的对象。
所用知识【1】Boolean 对象是布尔值的对象包装器。其特点是如果是假值其返回的是Boolean {[[PrimitiveValue]]: false}。如果是真值返回的是Boolean {[[PrimitiveValue]]: true}而且对象类型不可以直接引用。(很容易当成布尔值用,其实不能)具体适用方法在https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Boolean。
【2】filter()方法自带循环整个数组的功能,并且通过return的方法使用。
(11)实现一个摧毁(destroyer)函数,第一个参数是待摧毁的数组,其余的参数是待摧毁的值。
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;
}
destroyer([1, 2, 3, 1, 2, 3], 2, 3);
这个例子非常重要,外边的参数传到函数内,arr的值是1, 2, 3, 1, 2, 3即数组内第一个数组的值,而a[0]值为1.因此在多维数组传参数时arguments这个局部对象变量非常重要,它是一个对象值,但arr_arg[0]却可以等于1, 2, 3, 1, 2, 3。因此使用内嵌函数时,如果传的参数是二维数组,最好使用arr_arg.更多知识在https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Functions/arguments。
(11)先给数组排序,然后找到指定的值在数组的位置,最后返回位置对应的索引。
function where(arr, num) {
arr.push(num);
arr.sort(function(a, b) {
return a - b;
});
num=arr.indexOf(num);
return num;
}
where([40, 60], 50);
(12)