美文网首页
进阶5 字符串与json

进阶5 字符串与json

作者: 512a36a11b8c | 来源:发表于2017-11-11 10:22 被阅读18次

    1. 使用数组拼接出如下字符串 ,其中styles数组里的个数不定

    var product = {
        name: '女装',
        styles: ['短款', '冬季', '春装']
    }
    
    function getTpl(product) {
      //不需要 \n,我们只需要 html 字符串就好
      // 字符串里面的空格可以不加,主要是让 html 缩进看的更清晰一些
      var str = '<dl>'
      str += '     <dt>' + product.name + '</dt>'
      for(var i = 0; i < product.styles.length; i++) {
        str += '   <dd>' + product.styles[i] + '</dd>'
      }
      str += '   </dl>'
      return str;
    }
    
    function getTpl2(product) {
      var htmls = []
      htmls.push('<dl>')
      htmls.push('  <dt>' + product.name + '</dt>')
      for(var i = 0; i < product.styles.length; i++) {
        htmls.push('<dd>' + product.styles[i] + '</dd>')
      }
      htmls.push('</dl>')
      return htmls.join('');
    }
    
    console.log(getTpl(product))
    console.log(getTpl2(product))
    
    <dl class="product"><dt>女装</dt><dd>短款</dd<dd>冬季</dd><dd>春装</dd></dl>
    

    错误示例:

    var prod = {
        name: '女装',
        styles: ['短款', '冬季', '春装']
    };
     function getTplStr(data){
              //todo...
             var str1='<dl class="product">\n';
             var str2="<dt>"+data["name"]+"</dt>\n";
             var str3="<dd>"+data.styles[0]+"</dd>\n";
             var str4="<dd>"+data.styles[1]+"</dd>\n";
             var str5="<dd>"+data.styles[2]+"</dd>\n";
             var str6="</dl>";
             return str1+str2+str3+str4+str5+str6;
    };
         var result = getTplStr(prod);  
         console.log(result);
    

    很多情况下我们经常需要把一个 从服务端获取的json 格式的数据展示到页面上,一般的做法是

    1. 获取数据
    2. 构造 html 字符串
    3. 放到页面上
      其中第2步就是我们这里的问题。对于题目中的数据,其中对象里包含name和styles两个属性,一般来说这是固定的。styles里是个数组,数组里的条目却是可变的,所以我们需要遍历数组。
      构造 HTML字符串最终的目的是要放到页面上,所以字符串里不需要\n来表示换行(否则放到页面上后 html 里就有了\n这个字符串,这不是我们希望看到的)

    2. 写出两种以上声明多行字符串的方法

    例如:

    var str = 'abcdeabcdeabcdeancdeabcdeabcdeabcdeancdeabcdeabcdeabcdeancdeabcdeabcdeabcdeancde'
    

    这段字符串很长,如何多行优雅的显示

    //tip: 如果是要拼接 html 字符串,最好让 html 对齐展示工整,这样可读性更好,多点空格没关系
    //方法1,字符串拼接
    var str1 = ''
    str1 += '<ul>'
    str1 += '  <li>1</li>'
    str1 += '  <li>2</li>'
    str1 += '</ul>'
    console.log(str1)
    
    //方法2, 数组 join
    var str2 = []
    str2.push( '<ul>')
    str2.push( '  <li>1</li>')
    str2.push( '  <li>2</li>')
    str2.push( '</ul>')
    console.log(str2.join(''))
    
    //方法3, 用\来转义换行符号,\后面没空格
    var str3 = '<ul>\
                  <li>1</li>\
                  <li>1</li>\
                </ul>'
    console.log(str3)
    
    //方法4, ES6的多行字符串表示方法
    var str3 = `<ul>
                  <li>1</li>
                  <li>2</li>
                </ul>`
    
    console.log(str3)
    

    错误示例:

    var  str="hello\nWorld!"
    var str = "hello\n\
          World\n\
          !";
    
    var str = ["s1","s2","s3"];
    var obj = str.join("\n");
    

    我们本意不是需要得到一个里面有换行字符串,而是想优雅的展示一大段很长的字符串。如果把这一大段字符串放到一行必然会导致代码的可读性变差,而字符串的单引号和双引号又不能换行展示,所以可以把一大段很长的字符串用+号或者数组的方式 进行拆分。这样代码的可读性就变好了

    3. 补全如下代码,让输出结果为字符串: hello\饥人谷

    var str = 'hello\\\饥人谷' ;       //补全代码
    console.log(str)
    

    4. 以下代码输出什么?为什么

    var str = 'jirengu\nruoyu'
    console.log(str.length)
    

    13,\n一个字符

    5. 写一个函数,判断一个字符串是回文字符串,如 abcdcba是回文字符串, abcdcbb不是

    //判断一个字符串是不是回文, 那这个函数的命名一般为 isXXX
    //函数的返回值一般是 true 或者 false
    function isPalindrome(str) {
      return str === str.split('').reverse().join('')
    }
    

    典型错误1:

    function strCheck(str){
                   var o=str.split('').reverse().join('');
                   if(o===str){
                       return str +" is "+true;
                   }else{
                       return str +" is "+false;
                   }
               }
    
    1. 不要 return 字符串,而是返回 true或者 false
    2. 代码要工整对齐

    典型错误2:

    function isPalindrome(str) {
      var newStr = str.split('').reverse().join('')
      return console.log(str === newStr)
    }
    
    1. 这里 return 的结果是undefined, 如果别人调用你这个函数什么也得不到
    2. 如果想在函数里打印,可以先这样
    console.log(str === newStr)
    return str === newStr
    

    6. 写一个函数,统计字符串里出现出现频率最多的字符

    function getMostFreq(str) {
      var dict = {}
      var max = 0
      var maxCh 
      for(var i = 0; i < str.length; i++) {
        var ch = str[i]
        if(dict[ch] === undefined) {
          dict[ch] = 1
        }else {
          dict[ch]++
        }
        if(dict[ch] > max){
          max = dict[ch]
          maxCh = str[i]
        }
      }
      return {index: max, ch: maxCh}
    }
    
    console.log(getMostFreq('helloooo worlddd'))
    

    7. 写一个camelize函数,把my-short-string形式的字符串转化成myShortString形式的字符串,如

    camelize("background-color") == 'backgroundColor'
    camelize("list-style-image") == 'listStyleImage'
    
    function camelize(str) {
      var arr = str.split('-')
      for(var i = 1; i < arr.length; i++){
        arr[i] = arr[i][0].toUpperCase() + arr[i].substr(1)
      }
      return arr.join('')
    }
    console.log( camelize("background-color") )
    

    8. 写一个 ucFirst函数,返回第一个字母为大写的字符 (***)

    ucFirst("hunger") == "Hunger"
    
    function ucFirst(str) {
    var fir = str[0].toUpperCase();
      str = fir + str.substr(1);
      return str;
    }
    

    9. 写一个函数truncate(str, maxlength), 如果str的长度大于maxlength,会把str截断到maxlength长,并加上...,如

    truncate("hello, this is hunger valley,", 10) == "hello, thi...";
    truncate("hello world", 20) == "hello world"
    
    function truncate(str,a) {
      if (str.length > a) {
        str = str.substring(0,a) + '...';
      }
      return str;
    }
    

    10. 什么是 JSON格式数据?JSON格式数据如何表示对象?window.JSON 是什么?

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(网络传输速度)。

    JSON 语法是 JavaScript 对象表示语法的子集。

    • 数据在名称/值对中
    • 数据由逗号分隔
    • 花括号保存对象
    • 方括号保存数组
      JSON 数据的书写格式是:名称/值对,名称/值对组合中的名称写在前面(在双引号中),值对写在后面(同样在双引号中),中间用冒号隔开:
    var json1 = {"name": "Byron", "age": "24"}
    var json2 = [
        {"name": "Byron", "age": "24"}, 
        {"name": "Byron2", "age": "25"}
    ]
    

    window.JSON : 是浏览器内置对象。可用于判断浏览器是否兼容JSON的用法,例如IE8版本以上才内置支持JSON.parse方法。

    11. 如何把JSON 格式的字符串转换为 JS 对象?如何把 JS对象转换为 JSON 格式的字符串?

    parse:把字符串转化为JSON对象
    stringify:把JSON对象转化为字符串

    var json = {
      "name": "Byron",
      "age": 24
    };
    
    var json_str = JSON.stringify(json);
    console.log(json_str);
    console.log(JSON.parse(json_str));
    

    相关文章

      网友评论

          本文标题:进阶5 字符串与json

          本文链接:https://www.haomeiwen.com/subject/qsdfmxtx.html