JSON劳淆、Array基礎(chǔ)知識

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

JSON 格式(JavaScript Object Notation 的縮寫)是一種用于數(shù)據(jù)交換的文本格式,2001年由 Douglas Crockford 提出曲掰,目的是取代繁瑣笨重的 XML 格式。

JSON格式基本規(guī)則

  • 并列的數(shù)據(jù)之間用逗號(", ")分隔拾氓。
  • 映射用冒號(": ")表示底哥。
  • 并列數(shù)據(jù)的集合(數(shù)組)用方括號("[]")表示房官。
  • 映射的集合(對象)用大括號("{}")表示。

另外JSON 對值的類型和格式有嚴(yán)格的規(guī)定

  • 復(fù)合類型的值只能是數(shù)組或?qū)ο蠓跄蹋荒苁呛瘮?shù)蜡峰、正則表達式對象、日期對象载绿。
  • 簡單類型的值只有四種:字符串油航、數(shù)值(必須以十進制表示)、布爾值和null(不能使用NaN, Infinity, -Infinity和undefined)怕享。
  • 字符串必須使用雙引號表示镰踏,不能使用單引號。
  • 對象的鍵名必須放在雙引號里面跌帐。
  • 數(shù)組或?qū)ο笞詈笠粋€成員的后面,不能加逗號含末。

以下是合格的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;
  }
} // 不能使用函數(shù)和日期對象

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

思路:用JSON.stringify方法用于將一個值轉(zhuǎn)為字符串。該字符串符合 JSON 格式盯仪,并且可以被JSON.parse方法還原蜜葱。使用JSON.parse方法將JSON字符串轉(zhuǎn)化成對象。

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方法會忽略對象的不可遍歷屬性爸黄,如函數(shù)揭鳞、正則表達式對象、日期對象等称开。所以這種深拷貝方法有局限性乓梨。

3、數(shù)組方法里push蕴侣、pop狈惫、shift、unshift胧谈、join菱肖、splice分別是什么作用?用 splice函數(shù)分別實現(xiàn)push稳强、pop和悦、shift渠缕、unshift方法

  • 數(shù)組方法歸納:
方法 用法 說明
push Array.push(str) 在數(shù)組最后添加一個或多個元素
pop Array.pop() 把數(shù)組最后一位彈出來亦鳞,返回
unshift Array.unshift(str) 在數(shù)組最前邊添加一個或多個元素
shift Array.shift() 把數(shù)組第一位拿出來返回,數(shù)組發(fā)生變化
join Array.join(separator) 作用是將數(shù)組各個元素是通過指定的分隔符進行連接成為一個字符串并返回遭笋。其作用和toString()相同
slice Array.slice(start,end) 該方法可從已有的數(shù)組中返回選定的元素徒探,原數(shù)組不變
concat concat(array) 用于拼接數(shù)組,a.concat(b)返回一個a和b共同組成的新數(shù)組央串,不會修改任何一個原始數(shù)組偷溺,也不會遞歸連接數(shù)組內(nèi)部數(shù)組
reverse Array.reverse() 方法用于將數(shù)組逆序,它會修改原數(shù)組
splice Array.splice(index, howmany, element1,.....,elementX) 用于一次性解決數(shù)組添加、刪除(這兩種方法一結(jié)合就可以達到替換效果)秩命,方法有三個參數(shù)
sort Array.sort() Array.sort(parameter) sort方法用于對數(shù)組進行排序,當(dāng)沒有參數(shù)的時候會按字母表升序排序袄友,如果含有undefined會被排到最后面霹菊,對象元素則會調(diào)用其toString方法
  • 用 splice函數(shù)實現(xiàn)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函數(shù)實現(xiàn)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函數(shù)實現(xiàn)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函數(shù)實現(xiàn)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旋廷、寫一個函數(shù),操作數(shù)組,數(shù)組中的每一項變?yōu)樵瓉淼钠椒缴谠瓟?shù)組上操作

function squareArr(arr){
  for(var i = 0;i < arr.length;i++){
    arr[i]*=arr[i]  //或者用Math函數(shù)Math.pow(arr[i], 2)
  }
}
var arr = [2, 4, 6]
squareArr(arr)
console.log(arr) // [4, 16, 36]

5、寫一個函數(shù)扯罐,操作數(shù)組烦衣,返回一個新數(shù)組,新數(shù)組中只包含正數(shù)

function filterPositive(arr){
  for(var i=0;i<arr.length;i++){
    if(typeof arr[i] !== 'number'){
      arr.splice(i,1)
      i--
    }
    else if(arr[i] <= 0){
      arr.splice(i,1)
      i--
    }
  }
}
var arr = [3, -1,  2,  '饑人谷', true]
filterPositive(arr)
console.log(arr) //[3,  2]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市示辈,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌纱耻,老刑警劉巖险耀,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異蘑志,居然都是意外死亡贬派,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門波桩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來请敦,“玉大人,你說我怎么就攤上這事萤皂」窗剩” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵弛车,是天一觀的道長。 經(jīng)常有香客問我喻括,道長贫奠,這世上最難降的妖魔是什么痹屹? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任些膨,我火速辦了婚禮腕侄,結(jié)果婚禮上芦疏,老公的妹妹穿的比我還像新娘。我一直安慰自己分预,他們只是感情好薪捍,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著与倡,像睡著了一般昆稿。 火紅的嫁衣襯著肌膚如雪息拜。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天喳瓣,我揣著相機與錄音畏陕,去河邊找鬼仿滔。 笑死犹芹,一個胖子當(dāng)著我的面吹牛鞠绰,可吹牛的內(nèi)容都是我干的腰埂。 我是一名探鬼主播屿笼,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼翁巍,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了肝断?” 一聲冷哼從身側(cè)響起例朱,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤洒嗤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后渔隶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡绞灼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年呈野,在試婚紗的時候發(fā)現(xiàn)自己被綠了低矮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡被冒,死狀恐怖军掂,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情昨悼,我是刑警寧澤蝗锥,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站率触,受9級特大地震影響终议,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一穴张、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧陆馁,春花似錦找颓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至益老,卻和暖如春彪蓬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背捺萌。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工档冬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人桃纯。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓酷誓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親态坦。 傳聞我的和親對象是個殘疾皇子盐数,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 第5章 引用類型(返回首頁) 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的JavaScript類型 使用基本類型...
    大學(xué)一百閱讀 3,237評論 0 4
  • 本章內(nèi)容 使用對象 創(chuàng)建并操作數(shù)組 理解基本的 JavaScript 類型 使用基本類型和基本包裝類型 引用類型的...
    悶油瓶小張閱讀 681評論 0 0
  • PHP常用函數(shù)大全 usleep() 函數(shù)延遲代碼執(zhí)行若干微秒。 unpack() 函數(shù)從二進制字符串對數(shù)據(jù)進行解...
    上街買菜丶迷倒老太閱讀 1,369評論 0 20
  • 葉老師說:“我們做任何一件事都要有夢想伞梯、有目標(biāo)玫氢,目標(biāo)就是讓夢想加了期限∶战耄” 夢想漾峡,我們每個人都有夢...
    嬌孋嬌婍閱讀 112評論 0 2
  • Day4~~2015.9.15 每日一譯 原文:It's easy to come up with new ide...
    百變辣媽閱讀 312評論 0 2