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)來獲取內容,你就應該使用對象。
對象與數組搭配使用
除了單獨使用對象和數組之外,其實你還可以將它們兩者混在一起使用。你可以使用數字和布爾體系來儲存其他基本數據,除了數字和布爾體系之外,你還可以使用:
- 對象內的數組
- 數組內的對象
- 數組中的數組
- 對象內的對象
通常初學者會在這里感到困惑。但是在處理大規模數據的時候,你通常都需要這種混合的使用方式。
我們再用書舉個例子。如果我想要將每個章節的頁碼也儲存起來,我該怎么辦?最好的方式,就是在我們的數組中使用對象。就像這樣:
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