美文网首页
JS对象 & JSON & JS数组操作

JS对象 & JSON & JS数组操作

作者: Long_Dark | 来源:发表于2020-03-14 18:25 被阅读0次

    1. JSON格式的数据需要遵循什么规则

    JSON 格式(JavaScript Object Notation 的缩写)是一种用于数据交换的文本格式,2001年由 Douglas Crockford 提出,目的是取代繁琐笨重的 XML 格式。

    JSON格式基本规则
    • 并列的数据之间用逗号(", ")分隔。
    • 映射用冒号(": ")表示。
    • 并列数据的集合(数组)用方括号("[]")表示。
    • 映射的集合(对象)用大括号("{}")表示。
    另外JSON 对值的类型和格式有严格的规定
    1. 复合类型的值只能是数组或对象,不能是函数、正则表达式对象、日期对象。
    2. 简单类型的值只有四种:字符串、数值(必须以十进制表示)、布尔值和null(不能使用NaN, Infinity, -Infinity和undefined)。
    3. 字符串必须使用双引号表示,不能使用单引号。
    4. 对象的键名必须放在双引号里面。
    5. 数组或对象最后一个成员的后面,不能加逗号。

    以下是合格的JSON格式

    ["one", "two", "three"]
    { "one": 1, "two": 2, "three": 3 }
    {"names": ["张三", "李四"] }
    [ { "name": "张三"}, {"name": "李四"} ]
    

    以下是不合格的写法

    { name: "张三", 'age': 32 }  // 属性名必须使用双引号
    
    [32, 64, 128, 0xFFF] // 不能使用十六进制值
    
    ["one","two","three",] //最后边不要加逗号
    
    { "name": "张三", "age": undefined } // 不能使用undefined
    
    { "name": "张三", "age": null, } // 最后边不要加逗号
    
    { "name": "张三",
      "birthday": new Date('Fri, 26 Aug 2011 07:13:10 GMT'),
      "getName": function() {
          return this.name;
      }
    } // 不能使用函数和日期对象
    

    2. 遍历 company 对象,输出里面每一项的值

    var company = {
        name: '饥人谷',
        age: 3,
        sex: '男'
    }
    //
    var company = {
        name: '饥人谷',
        age: 3,
        sex: '男'
    }
    for (var i in company){
        console.log (company[i])
    }
    

    3. 使用 JSON 对象实现一个简单的深拷贝函数(deepCopy)

    JSON.stringify方法用于将一个值转为字符串。该字符串符合 JSON 格式,并且可以被JSON.parse方法还原。使用JSON.parse方法将JSON字符串转化成对象。

    var student = {
      name: 'Jim',
      age: 3,
      friends: ['cat', 'dog', 'bird']
    }
    var student2 = JSON.parse(JSON.stringify(student))
    student.age = 5
    console.log(student2)
    

    注意:JSON.stringify方法会忽略对象的不可遍历属性,如函数、正则表达式对象、日期对象等。所以这种深拷贝方法有局限性。

    4.分别举例说明数组方法pushpopshiftunshiftjoinsplicesortreverseconcat的作用

    var arr = [1, 2, 3, 4]
    
    arr.push('dog') // 在数组的最后面添加一个元素, 返回数组的长度 5
    console.log(arr)  //  [1, 2, 3, 4, 'dog']
    
    arr.pop() // 把数组的最后一个元素取出来,返回这个元素 4
    console.log(arr)  // [1, 2, 3]
    
    arr.shift() // 把数组的第一个元素取出来,返回这个元素 1
    console.log(arr)  // [2, 3, 4]
    
    arr.unshitf('dog') //  在数组的最前面添加一个元素, 返回数组的长度 5
    console.log(arr)  // ['dog', 1, 2, 3, 4]
    
    var str1 = arr.join()
    // 把数组中的所有元素放入一个字符串, 元素是通过指定的分隔符进行分隔, 参数为空则和数组一样,用逗号分隔
    console.log(str1)  // 1,2,3,4
    console.log(arr)  // [1, 2, 3, 4]
    var str2 = arr.join("") // 表示用空字符串连接
    console.log(str2)  // 1234
    var str3 = arr.join(-) // 表示用横线连接
    console.log(str3)  // 1-2-3-4
    
    var arr1 = arr.splice(1,2,8) // 从arr中,下标为1的元素开始,拿出2个元素作为数组返回,并且用8代替两个元素,会改变原数组
    console.log(arr1) // [1,8,4]
    
    var arr2 = arr.sort() //sort方法用于对数组进行排序,当没有参数的时候会按字母表升序排序,如果含有undefined会被排到最后面,会改变原数组
    console.log(arr2) //[1, 2, 3, 4]
    var a = [7,8,9,10,11] //其中如果含有十位数字,不加条件则会排序为[10,11,7,8,9],此时可以引入自定义排序
    
        a.sort(function(v1,v2){
            return v1-v2
        })
        console.log(a) //[7, 8, 9, 10, 11]
    
    var arr3 = arr.reverse() //方法用于将数组逆序,它会修改原数组
    console.log(arr3) // [4,3,2,1]
    
    var arr0 = [5,6,7]
    var arr5 = arr.concat(arr0) //concat方法用于拼接数组,它不会会修改原数组
    console.log(arr5) // [1,2,3,4,5,6,7]
    

    5.写一个函数,操作数组,返回一个新数组,新数组中只包含正数

    function filterPositive(arr){
    }
    var arr = [3, -1,  2,  '饥人谷', true]
    filterPositive(arr)
    console.log(filterPositive(arr)) //[3,  2]
    //纯数字的时候可以使用for循环
    //for (var i = 0,i < a.length,i++){
    //  if(a[i]<0){
    //    a.splice(i,1)
    //    i--
    //  }
    //}
    //或 for (var i = a.length-1,i > 0, i--){
    //  if(a[i]<0){
    //   a.splice(i,1) 
    //   }
    //}
    function filterPositive(arr){
      var arr1 = []
      for(var i = 0;i < arr.length;i++){
        if(typeof arr[i] === 'number' && arr[i] > 0){
          arr1.push(arr[i])
        } 
      }
      return arr1
    }
    var arr = [3, -1,  2,  '饥人谷', true]
    var arr1 = filterPositive(arr)
    console.log(filterPositive(arr))
    

    6.用 splice函数分别实现 push、pop、shift、unshift方法

    终极神器splice
    JavaScript提供了一个splice方法用于一次性解决数组添加、删除(这两种方法一结合就可以达到替换效果),方法有三个参数
    1.开始索引
    2.删除元素的位移
    3.插入的新元素,当然也可以写多个
    splice方法返回一个由删除元素组成的新数组,没有删除则返回空数组

    function push(arr, value){
        arr.splice(arr.length, 0, value)
        return arr.length
    }
    var arr = [3, 4, 5]
    push(arr,10)
    console.log(arr) // arr 变成[3,4,5,10],返回4
    
    function pop(arr){
        arr.splice(arr.length-1, 1)
        return arr.length
    }
    var arr = [3, 4, 5]
    pop(arr)
    console.log(arr) // arr 变成[3,4],返回2
    
    function shift(arr){
        arr.splice(0, 1)
        return arr.length
    }
    var arr = [3, 4, 5]
    shift(arr)
    console.log(arr) // arr 变成[4,5],返回2
    
    function unshift(arr, val){
        arr.splice(0, 0, val)
        return arr.length
    }
    var arr = [3, 4, 5]
    unshift(arr,10)
    console.log(arr)  // arr 变成[10,3,4,5],返回4
    
    使用`sort`进行排序
    

    // 按age 从小到大排序
    var sortByAge = users.sort(function(v1,v2){
    return v1.age > v2.age
    })

    // 按name从大到小排序
    var sortByName = users.sort(function(v1,v2){
    return v1.name > v2.name
    })

    // 按company从大到小排序
    var sortByCompany = users.sort(function(v1,v2){
    return v1.company > v2.company
    })

    #8.分别举例说明ES5数组方法 indexOf、forEach、map、every、some、filter、reduce的用法
    ##### 1..indexOf(element) / .lastIndexOf(element)
    这两个方法用于查找数组内指定元素位置,查找到第一个后返回其索引,没有查找到返回-1,indexOf从头至尾搜索,lastIndexOf反向搜索
    

    var arr = [1,2,3,3,2,1]
    console.log(arr.indexOf(2)) //1 正数第一个2
    console.log(arr.lastIndexOf(2)) //4 倒数第一个2

    
    ##### 2. .forEach(element, index, array)
    遍历数组,参数为一个回调函数,回调函数有三个参数:
    - 当前元素
    - 当前元素索引值
    - 整个数组
    
    

    var arr = new Array(1, 2, 3, 4);
    arr.forEach(function(e,i,array){
    array[i]= e + 1; //每项加1
    });
    console.log(arr); //[2, 3, 4, 5,]

    ##### 3. .map(function(element))
    与forEach类似,遍历数组,回调函数返回值组成一个新数组返回,新数组索引结构和原数组一致,原数组不变
    

    var a = [1, 2, 3, 4, 5, 6]

    console.log(a.map(function(e){
    return e + e
    })) // [1, 4, 6, 8, 10, 12]
    console.log(a) //[1, 2, 3, 4, 5, 6]

    ##### 4. .every(function(element, index, array)) / .some(function(element, index, array))
    回调函数返回一个布尔值
    every是所有函数的每个回调函数都返回true的时候才会返回true,当遇到false的时候终止执行,返回false
    some函数是“存在”有一个回调函数返回true的时候终止执行并返回true,否则返回false
    在空数组上调用every返回true,some返回false
    

    var a = [1, 2, 3, 4, 5, 6]

    console.log(a.every(function(e, i, arr){
    return e < 5 //是不是每一个数都小于5
    })) //false

    console.log(a.some(function(e,i,arr){
    return e > 4 //是不是有一些数大于4
    })) //ture

    ##### 5. .filter(function(element))
    返回数组的一个子集,回调函数用于逻辑判断是否返回,返回true则把当前元素加入到返回数组中,false则不加
    新数组只包含返回true的值,索引缺失的不包括,原数组保持不变
    

    var a = [1, 2, 3, 4, 5, 6]

    console.log(a.filter(function(e){
    return e > 3;
    })) // [4, 5, 6]

    console.log(a) //[1, 2, 3, 4, 5, 6]

    ##### 6. .reduce(function(v1, v2), value) / .reduceRight(function(v1, v2), value)
    遍历数组,调用回调函数,将数组元素组合成一个值,reduce从索引最小值开始,reduceRight反向,方法有两个参数
    - 回调函数:把两个值合为一个,返回结果
    - value,一个初始值,可选
    
    

    var a = [1, 2, 3, 4, 5, 6]
    var b = a.reduce(function(v1, v2){
    return v1 + v2
    })
    console.log(a) // 21

    var b = a.reduceRight(function(v1, v2){
    return v1 - v2
    }, 100)
    console.log(b) // 79

    # 9. 写补全sortString函数,实现字符串倒序
    

    function sortString(str){
    //补全
    }
    var str = 'jirenguhungervalley'
    var str2 = sortString(str)
    console.log(str2) // 'yellavregnuhugnerij'

    function sortString(str){
    var strA = []
    for(var i = str.length - 1;i >= 0;i--){
    strA.push(str[i])
    }
    return strA.join('')
    }
    var str = 'jirenguhungervalley'
    var str2 = sortString(str)
    console.log(str2) // 'yellavregnuhugnerij'

    //或者更简单一些
    function sortString(str){
    return str.split('').reverse().join('')
    }
    var str = 'jirenguhungervalley'
    var str2 = sortString(str)
    console.log(str2) // 'yellavregnuhugnerij'

    相关文章

      网友评论

          本文标题:JS对象 & JSON & JS数组操作

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