9.9 7日知识实践和总结(关于JavaScript的数组操作)

(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)





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值