JavaScript數組和對象就像是書與報紙的關系

lang0428 7年前發布 | 18K 次閱讀 JavaScript開發 JavaScript

只要你讀過書、看過報,你就能理解JavaScript中的數組與對象的關系。在剛剛接觸JavaScript的時候,你很可能會感到困惑,尤其是哪種方式才是整理和儲存數據最好的方式。

一方面來說,在學習“for” loop的時候,你肯定已經熟悉了數組這個概念。但是,當你嘗試將大量數據放入數組的時候,你會發現混亂叢生,讓你自己都無法理解自己的代碼。

在對每一個架構的目的進行分析的時候,你會發現自己有時應該使用對象,有時應該使用數組,而這兩種之間的區別究竟在哪里?簡單來說,數組就像是一本書那樣儲存信息。而對象的信息存儲方式,更像是報紙。

數組:數據的順序最重要

我們假想一本內容特別少的書,用數組的形式展現出來就是這樣:

var book = ['foreword', 'boyWhoLived', 'vanishingGlass', 'lettersFromNoOne', 'afterword'];

其實,這就是第一本《哈利波特》的前三章,我們現在把這個數組用可視化的方式呈現出來:

在整理信息方面,如果順序是重要的因素,那么你就應該使用數組。很少有人在看書的時候,會跳過前幾章,直接去看第四章吧。我們看書的時候,基本都是按照章節順序來看的。

在從數組處取回信息的時候,你使用的就是每一個個元素的檢索標識(index)。數組的檢索標識是從0開始的,也就是說它的起始點是0,而不是1。

換句話說,如果你想要獲取一本書中的檢索標識0,你就需要使用:

books[0]

你會得到:

‘foreword’

如果你想要查看這本書的第三部分,你就要使用:

books[2]

在選擇篇章的時候,你使用的是篇章的順序,而不是篇章的名稱。

對象:數據標簽最重要

我們用對象來呈現一下報紙的樣子:

var newspaper= {

  sports: 'ARod Hits Home Run',

  business: 'GE Stock Dips Again',

  movies: 'Superman Is A Flop'

}

再用可視化的方式來看看:

如果你想用數據標簽來管理數據,對象就是最好的方式。在看報紙的時候,很多時候我們都不是從第一版到最后一版按照順序閱讀,而是先閱讀自己最感興趣的版面。

你會根據版面的名稱來選擇閱讀的內容,無論版面在第幾頁,你都可以直接翻過去閱讀。和讀書不一樣,看報紙的時候我們不太講究順序。對象是根據key/value這種配對來管理信息的:

key: value

如果你想看報紙中的商業版,你就要這樣的命令:

newspaper[‘business’]

或者:

newspaper.business

因此,如果你想使用標簽(key)來獲取內容,你就應該使用對象。

對象與數組搭配使用

除了單獨使用對象和數組之外,其實你還可以將它們兩者混在一起使用。你可以使用數字和布爾體系來儲存其他基本數據,除了數字和布爾體系之外,你還可以使用:

  1. 對象內的數組
  2. 數組內的對象
  3. 數組中的數組
  4. 對象內的對象

通常初學者會在這里感到困惑。但是在處理大規模數據的時候,你通常都需要這種混合的使用方式。

我們再用書舉個例子。如果我想要將每個章節的頁碼也儲存起來,我該怎么辦?最好的方式,就是在我們的數組中使用對象。就像這樣:

 var book =[

  [‘foreword’, 14],

  [‘boywholived’, 18]

]
 var book = [
  {name:'foreword', pageCount: 14},
  {name:'boyWhoLived', pageCount: 18},
  {name:'vanishingGlass', pageCount: 13},
  {name:'lettersFromNoOne', pageCount: 17},
  {name:'afterword', pageCount: 19}
];

這樣我們就儲存了章節的順序,同時也能對每一章的具體屬性進行命名。如果我們想要知道第二章的頁碼,我們就可以使用:

book[1][‘pageCount’]

于是我們得到了18這個值。

現在,我們假設你想要看到當地報紙的著名作家名單,并且按照年齡大小進行排列。你可以在一個報紙這個對象中使用一個數組:

var newspaper= {
  sports: 'ARod Hits Home Run',
  sportsWriters: ['Miramon Nuevo', 'Rick Reilly', 'Woddy Paige'],
  business: 'GE Stock Dips Again',
  businessWriters: ['Adam Smith', 'Albert Humphrey', 'Charles Handy'],
  movies: 'Superman Is A Flop',
  moviesWriters: ['Rogert Ebert', 'Andrew Sarris', 'Wesley Morris']
}

我們在這里使用數組,因為我們要按照年齡對作者進行排列,也就是說要按照順序排列。于是檢索編碼為0的作者排名最高。

自測題目

假設你的web應用有一個小測試版塊,用戶在這里需要回答一些問題,最后得到一個分數。你需要儲存用戶的每一個回答,最后對這些答案進行檢查。你要使用哪種架構來儲存所有用戶的答案?為什么?

假設你允許用戶在你的網站上創建新賬戶,賬戶名格式為名、姓、電子郵件和密碼。在將它發送到后端之前,你想要儲存這些數據。你要使用哪種架構來儲存用戶的信息?為什么?

假如你要搭建一個論壇,你要根據點贊的數量來排列用戶的跟帖。你要使用哪種架構?你何時需要檢測跟帖文本以及點贊數量?提示:需要對象與數組的混用。

 

 

 

來自:https://sdk.cn/news/6886

 

 本文由用戶 lang0428 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!