JSON、Array基礎知識

4787 ワード

1、JSON形式のデータはどのようなルールに従う必要がありますか
JSONフォーマット(JavaScript Object Notationの略)は、データ交換のためのテキストフォーマットであり、2001年にDouglas Crockfordによって提案され、煩雑で重いXMLフォーマットに取って代わることを目的としている.
JSON形式基本規則
  • 並列のデータ間をカンマ(",")で区切ります.
  • マッピングは、コロン(":")で表されます.
  • 並列データの集合(配列)は角括弧("[])で表される.
  • マッピングされたセット(オブジェクト)は、括弧({})で表されます.

  • またJSONは値のタイプやフォーマットに厳しい規定があります
  • 複合タイプの値は、配列またはオブジェクトのみで、関数、正規表現オブジェクト、日付オブジェクトではありません.
  • 単純タイプの値は、文字列、数値(10進数で表示する必要があります)、ブール値、null(NaN、Infinity、-Infinity、undefinedは使用できません).
  • 文字列は二重引用符で表さなければなりません.一重引用符は使用できません.
  • オブジェクトのキー名は、二重引用符で囲まなければなりません.
  • 配列またはオブジェクトの最後のメンバーの後ろにカンマを付けることはできません.

  • 以下は合格JSON形式
    ["one", "two", "three"]
    
    { "one": 1, "two": 2, "three": 3 }
    
    {"names": ["  ", "  "] }
    
    [ { "name": "  "}, {"name": "  "} ]
    
    {}
    
    []
    
    null
    

    以下は不合格の書き方です
    { 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、JSONオブジェクトを使用して簡単な深いコピー関数を実現する(deepCopy)
    考え方:JSON.stringifyメソッドは、値を文字列に変換するために使用されます.この文字列はJSON形式に適合する、JSONを使用することができる.parseメソッド復元.JSONを使用します.parseメソッドはJSON文字列をオブジェクトに変換します.
    var oldObj={
      name:{
        firstName:'Jim',
        lastName:'King'
      },
      age:'24'  
    }
    function clone(obj){
      var newObj;
      newObj=JSON.parse(JSON.stringify(obj));
      return newObj;
    }
    var cloneObj=clone(oldObj)
    console.log(cloneObj)
    
    /*
    [object Object] {
      age: "24",
      name: [object Object] {
        firstName: "Jim",
        lastName: "King"
      }
    }
    */
    
    cloneObj.name.firstName='Tom'
    cloneObj.age='18'
    console.log(cloneObj.name.firstName+cloneObj.age) //"Tom18"
    console.log(oldObj.name.firstName+oldObj.age)  //"Jim24
    

    注意:JSON.stringifyメソッドでは、関数、正規表現オブジェクト、日付オブジェクトなど、オブジェクトの不可遍歴属性は無視されます.従って、この深いコピー方法には限界がある.
    3、配列方法のpush、pop、shift、unshift、join、spliceはそれぞれどんな作用がありますか?push,pop,shift,unshiftメソッドをsplice関数でそれぞれ実現する
  • 配列メソッドまとめ:
  • 方法
    使用法
    説明
    push
    Array.push(str)
    配列の最後に1つ以上の要素を追加
    pop
    Array.pop()
    配列の最後の1つを弾き出して、戻ります
    unshift
    Array.unshift(str)
    配列の一番前に1つ以上の要素を追加
    shift
    Array.shift()
    配列1位を取り出して返すと配列が変化します
    join
    Array.join(separator)
    配列の各要素を指定した区切り記号で文字列に接続して返す役割を果たします.その役割はtoString()と同じです
    slice
    Array.slice(start,end)
    このメソッドは、既存の配列から選択した要素を返すことができ、元の配列は変更されません.
    concat
    concat(array)
    配列を接合するために使用され、a.concat(b)はaとbが共に構成された新しい配列を返し、元の配列は変更されず、配列内部の配列は再帰的に接続されません.
    reverse
    Array.reverse()
    メソッドは、配列を逆シーケンスするために使用され、元の配列が変更されます.
    splice
    Array.splice(index, howmany, element1,.....,elementX)
    配列の追加、削除を一度に解決するには、3つのパラメータがあります(この2つの方法を組み合わせると置換効果が得られます).
    sort
    Array.sort() Array.sort(parameter)
    sortメソッドは配列をソートするために使用され、パラメータがない場合はアルファベット順にソートされ、undefinedが含まれている場合は最後尾にソートされ、オブジェクト要素はtoStringメソッドを呼び出します.
  • splice関数を用いてpush法
  • を実現する
    var arr1=[3,4,5]
    arr1.push('hello')
    console.log(arr1)   //[3, 4, 5, "hello"]
    var arr2=[3,4,5]
    arr2.splice(3,0,'hello')
    console.log(arr2)   //[3, 4, 5, "hello"]
    
  • splice関数を用いてpop法
  • を実現する
    var arr1=[3,4,5]
    arr1.pop()
    console.log(arr1)   //[3, 4]
    var arr2=[3,4,5]
    arr2.splice(2,1)
    console.log(arr2)   //[3, 4]
    
  • splice関数によるshift法
  • の実現
    var arr1=[3,4,5]
    arr1.shift()
    console.log(arr1)   //[4, 5]
    var arr2=[3,4,5]
    arr2.splice(0,1)
    console.log(arr2)   //[4, 5]
    
  • splice関数によるunshift法
  • の実現
    var arr1=[3,4,5]
    arr1.unshift('hello')
    console.log(arr1)   //["hello", 3, 4, 5]
    var arr2=[3,4,5]
    arr2.splice(0,0,'hello')
    console.log(arr2)   //["hello", 3, 4, 5]
    

    4、1つの関数を書いて、配列を操作して、配列の中のすべての項はもとの平方になって、もとの配列の上で操作します
    function squareArr(arr){
      for(var i = 0;i < arr.length;i++){
        arr[i]*=arr[i]  //   Math  Math.pow(arr[i], 2)
      }
    }
    var arr = [2, 4, 6]
    squareArr(arr)
    console.log(arr) // [4, 16, 36]
    

    5、1つの関数を書いて、配列を操作して、1つの新しい配列を返して、新しい配列の中で正数だけを含みます
    function filterPositive(arr){
      for(var i=0;i