数组字符串类笔试题

1.把var str=”www.xinle.com”变成var strResult=”moc.elnix.www”输出 。
解析:

<script type="text/javascript">
//方法一(字符串与数组相互转换)
    /*function change(s){
        s=s.split("").reverse().join("");
        alert(s);
    }
    var t="www.xinle.com";
    change(t);*/

    //方法二(逆序遍历)
    function change(s){
        var str="";
       var len=s.length;
       for(var i=len-1;i>=0;i--){
        str+=s.substring(i,i+1);
       }
        alert(str);
    }
    var t="www.xinle.com";
    change(t);
</script>

2.用js去除某个数组中重复的元素。
解析:

<script type="text/javascript">
    function del_same(s){
     var len=s.length;
     for(var i=0;i<len;i++){
        for(var j=i+1;j<len;j++){
            if(s[i]===s[j]){
                s.splice(j,1);
            }
        }
     }
     alert(s);
    }
    var t=[1,2,2,7,9,5,5,7,3,2];
    del_same(t);
</script>

3.现有一个字符串abc234efghi.(1)将此字符串中的数字换成[2][3][4]的形式,并输出字符串;
解析:

<script type="text/javascript">
    function change(s){
      s=s.split("");//转换成数组操作
      var len=s.length;
     for(var i=0;i<len;i++){
        if(!isNaN(parseInt(s[i]))){
            /*parseInt()后非数字则返回NaN,注意此处不能
            用是否等于NaN判断,因为数字与NaN都不等于NaN,
            也不能用typeof,NaN和数字都返回number*/
            s.splice(i,1,"["+s[i]+"]");
        }
        }
        s=s.join("");//恢复成字符串
        alert(s);
    }
    var t="abc234efghi";
    change(t);
    //方法二(正则表达式)。
</script>

4.实现一个数组,数组长度为100,随机产生[100,1000]的整数,不能重复。
解析:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
<script type="text/javascript">
  function arr(){
    var arry=new Array();
    var len=100;
    var num=Math.round(Math.random()*900+100);
    arry[0]=num;           //第一个数不需要与其他比较
    for(var i=1;i<len;i++){  //从第二个数起与前面数依次比较
        var num=Math.round(Math.random()*900+100);
        var flag=0;        //设置重复标志位
        for(var j=i-1;j>=0;j--){
            if(num===arry[j]){    //当次数与之前所有数比较
                flag=1;       //代表有重复
            }
        }
        if(flag==1){
            i--;      //有重复则此次循环不算
        }else{
            arry[i]=num;
        }
    }
    alert(arry);
  }
  arr();
</script>
</body>
</html>

5.JS中也会有排序的需求,用JS实现一个标准的排序算法,对某个数字数组进行由低到高的排序。
解析:

//用js的sort()函数为
function compare(val1,val2){
if(val1<val2){
return  -1;
}else if(val1>val2){
return 1;}else{
return 0;}
var s=[5,1,2,6,3,8];
s.sort(compare);
//冒泡算法实现为
var s=[5,1,2,6,3,8];
function sort_number(s){
var tmp=””;
var flag=1;
for(var k=0;k<s.length&&flag==1;k++){
flag=0;
for(var i=s.length-1;i>k;i--){
  if(s[i]>s[i+1]){
tmp=s[i+1];
s[i+1]=s[i];
s[i]=tmp;
flag=1;
}
}
console.log(s); 
} 
sort_numbers(s);  

6.补充函数。
function result(dpl,data){
//你的代码
}
var desc=”我是{name},我今年{age}岁,我在{city}市”;
var data1={name:”张三”,age:25,city:”重庆”};
var data2={name:”李四”,age:29,city:”北京”};
alert(result(desc,data1));
alert(result(desc,data2));
实现输出:我是张三,我今年25岁,我在重庆市
我是李四,我今年29岁,我在北京市

解析:分析:此题难点有以下几点
(1)替换的参数data为字面量对象,用toString()不能将其转成字符串,此处用JSON.stringify()将其序列化为字符串,注意我们要的是json字符串里的内容,故不要忘了去除“外包装”{}后再存储成数组。
(2)json字符串里的键值都带有”“,我们要的是”“里的内容,故还要去”“操作,但数字值有一般不带”“,所以还要筛选出不是数字的值再操作,此处的易错点在于从一串包含数字的字符串中找出数字来是不能直接typeof parseInt(s)的,原因是parseInt()后非数字字符返回NaN,数字字符则返回数字本身,而typeof NaN和typeof 数字,得到的都是number,也不能用是否等于NaN来判断,因为NaN和数字都不等于NaN,所以此处要用isNaN()来分辨出NaN和数字,即非数字字符和数字。
(3)去除字符串的“外包装”常用slice()或substring()
(4)对字符串的某一部分操作可直接用正则表达式处理,也可以用split()将其转换成数组,再用splice()操作,最后用join()恢复成字符串。

  var a=b=c=[];
      var res=[];    
          a=dpl.split(",");
          b=JSON.stringify(data).slice(1,this.length-1).split(",");
          //将js对象转成json字符串后去除首尾{}并分割成数组存放在b中
      var b_len=b.length;
      for(var i=0;i<b_len;i++){
      res[i]=b[i].split(":")[1];
      //b[i]为带""的键值对字符串,分割后取值
      if(isNaN(parseInt(res[i]))){
   res[i]=res[i].slice(1,this.length-1);
   //去除不是数字的值的""
}

//方法一:将a[i]中的字符串直接用正则替换
      var reg=/\{.*\}/;          //匹配到{...}这样的内容
          a[i]=a[i].replace(reg,res[i]);

//方法二:将a[i]中的字符串再分成数组,用splice()进行替换
       /* c=a[i].split("");
     var start=a[i].indexOf("{");
     var fins=a[i].indexOf("}");
     var c_len=fins-start+1;
      c.splice(start,c_len,res[i]);
     a[i]=c.join("");*/
      }
  }
return a.join(",");//组成字符串返回
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值