JSON 和 Array

1. JSON 格式的數(shù)據(jù)需要遵循什么規(guī)則

  1. 復(fù)合類型的值只能是數(shù)組或?qū)ο?,不能是函?shù)、正則表達式對象、日期對象。
  2. 簡單類型的值只有四種:字符串、數(shù)值(必須以十進制表示)、布爾值和null(不能使用 NaN, Infinity, -Infinity和undefined)。
  3. 字符串必須使用雙引號表示,不能使用單引號。
  4. 對象的鍵名必須放在雙引號里面。
  5. 數(shù)組或?qū)ο笞詈笠粋€成員的后面,不能加逗號。

2. 使用 JSON 對象實現(xiàn)一個簡單的深拷貝函數(shù)(deepCopy)

var obj1 = {
  age: 20,
  name: 'wangpeng',
  friend : {
    name: 'dog',
    sex: 'male'
  }
}

function copy(obj) {
var newObj = {}
newObj = JSON.parse( JSON.stringify(obj) )
return newObj
}

var obj2 = copy(obj1)
console.log(obj2)

3.1 數(shù)組方法里push、pop、shift、unshift、join、splice分別是什么作用?

var arr = [1, 2, 3, 4]
arr.push('wangpeng') // 在數(shù)組的最后面添加一個元素, 返回數(shù)組的長度 5
console.log(arr)  //  [1, 2, 3, 4, 'wangpeng']
arr.pop() // 把數(shù)組的最后一個元素取出來,返回這個元素 4
console.log(arr)  // [1, 2, 3]
arr.unshitf('wangpeng') //  在數(shù)組的最前面添加一個元素, 返回數(shù)組的長度 5
console.log(arr)  // ['wangpeng', 1, 2, 3, 4]
arr.shift() // 把數(shù)組的第一個元素取出來,返回這個元素 1
console.log(arr)  // [2, 3, 4]
var str1 = arr.join()
// 把數(shù)組中的所有元素放入一個字符串, 元素是通過指定的分隔符進行分隔, 參數(shù)為空則和數(shù)組一樣,用逗號分隔
console.log(str1)  // 1,2,3,4
console.log(arr)  // [1, 2, 3, 4]
var str2 = arr.join("") // 表示用空字符串連接
console.log(str2)  // 1234
var arr1 = arr.splice(1,2) // 從arr中,下標(biāo)為1的元素開始,拿出2個元素作為數(shù)組返回,原數(shù)組發(fā)生改變 [2, 3]
console.log(arr) // [1, 4]

3.2 用 splice函數(shù)分別實現(xiàn)push、pop、shift、unshift方法

JavaScript提供了一個splice方法用于一次性解決數(shù)組添加、刪除(這兩種方法一結(jié)合就可以達到替換效果),方法有三個參數(shù)

  1. 開始索引 (可以是負數(shù),表示從后向前索引, - 1 可以理解為 arr.length - 1)
  2. 刪除元素的位移
  3. 插入的新元素,當(dāng)然也可以寫多個

splice方法返回一個由刪除元素組成的新數(shù)組,沒有刪除則返回空數(shù)組

arr.splice(arr.length, 0, 5) // push 在 arr 中最后面,添加元素 5
//  這里 splice 模擬,push,必須要大于等于length,不能length-1。否則會在最后一個元素之前的一位添加 
arr.splice(arr.length-1, 1) // pop 從arr 中刪除最后一個元素,并返回這個由刪除元素組成的新數(shù)組,原數(shù)組改變, arr.length-1 可以 理解為 -1,代表著數(shù)組最后一位
//這里也可以是 - 1,表示arr 最后一位, 但是和上面的添加元素不同,這里第一個參數(shù)超出 arr 最大下標(biāo)之后,返回空數(shù)組,也就是沒有刪除
arr.splice(0, 0, 0) // unshift 在 arr 中最前面,添加元素 0
arr.splice(0, 1) // shift 從 arr 中刪除第一個元素

4. 寫一個函數(shù),操作數(shù)組,數(shù)組中的每一項變?yōu)樵瓉淼钠椒?,在原?shù)組上操作

方法一: 雖然原數(shù)組變了,但是函數(shù)內(nèi)部,不是在原數(shù)組操作,而是把平方結(jié)果進行賦值

function squareArr(arr){
  for(var i = 0; i < arr.length; i++){
    arr[i] = arr[i] * arr[i]
  }
}
var arr = [2, 4, 6]
squareArr(arr)
console.log(arr) // [4, 16, 36]

方法二: 使用splice方法, 在原數(shù)組上進行替換(實際過程是: 刪除+新增)

function squareArr(arr){
  for(var i = 0; i < arr.length; i++){
    arr.splice(i,1,Math.pow(arr[i],2))
  }
}
var arr = [2, 4, 6]
squareArr(arr)
console.log(arr) // [4, 16, 36]

5. 寫一個函數(shù),操作數(shù)組,返回一個新數(shù)組,新數(shù)組中只包含正數(shù)

首先是直接在原數(shù)組上操作,最后原數(shù)組發(fā)生改變

function filterPositive(arr){
  for(var i = 0; i < arr.length; i++){
    if( typeof arr[i] !== 'number' || arr[i] <= 0 ){
      arr.splice(i,1)
      i--
    }
  }
}
var arr = [3, -1,  2,  '饑人谷', true]
filterPositive(arr)
console.log(arr) //[3,  2]

正確方法是向新的數(shù)組內(nèi) push 元素,然后return 新的數(shù)組,這樣返回的才是新數(shù)組,而原數(shù)組不變

function filterPositive(arr){
  var newArr = []
  for(var i = 0; i < arr.length; i++){
    if(typeof arr[i] === 'number' && arr[i] > 0 ){
      newArr.push(arr[i])
    }
  }
  return newArr
}
var arr = [3, -1,  2,  '饑人谷', true]
var newArr = filterPositive(arr)
console.log(newArr) //[3, 2]
console.log(arr) //[3, -1,  2,  '饑人谷', true]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、使用數(shù)組拼接出如下字符串 ,其中styles數(shù)組里的個數(shù)不定 代碼: 2、寫出兩種以上聲明多行字符串的方法 一...
    1w1ng閱讀 230評論 0 0
  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,679評論 0 4
  • 初次接觸英語課堂,是初中一年級。 在那之前,聽別人說過類似“Ok”、"Thank you",對這種陌生的語言心生向...
    陳若黎閱讀 384評論 0 3
  • 我想要很多來自在意的人的尊重與重視 我想要很多來自在意的人的與關(guān)心與呵護 我想要很多來自在意的人的愛 現(xiàn)在的社會 ...
    _秋夜閱讀 205評論 0 0
  • 時間的平淡沖殺著記憶 那夜下的一檀余香 又何嘗不寂寞 靜脈 心跳 無助地雀躍著 夜好龐大 吞噬了一切 還有小小的...
    張?zhí)易?/span>閱讀 129評論 0 5

友情鏈接更多精彩內(nèi)容