掌握聚合最新动态了解行业最新趋势
API接口,开发服务,免费咨询服务

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应用有一个小测试版块,用户在这里需要回答一些问题,最后得到一个分数。你需要储存用户的每一个回答,最后对这些答案进行检查。你要使用哪种架构来储存所有用户的答案?为什么?

假设你允许用户在你的网站上创建新账户,账户名格式为名、姓、电子邮件和密码。在将它发送到后端之前,你想要储存这些数据。你要使用哪种架构来储存用户的信息?为什么?

假如你要搭建一个论坛,你要根据点赞的数量来排列用户的跟帖。你要使用哪种架构?你何时需要检测跟帖文本以及点赞数量?提示:需要对象与数组的混用。

qrcode_for_gh_9de197bcc61b_258.jpg

原文来自:SDK.cn

声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com

  • 购物小票识别

    支持识别各类商场、超市及药店的购物小票,包括店名、单号、总金额、消费时间、明细商品名称、单价、数量、金额等信息,可用于商品售卖信息统计、购物中心用户积分兑换及企业内部报销等场景

    支持识别各类商场、超市及药店的购物小票,包括店名、单号、总金额、消费时间、明细商品名称、单价、数量、金额等信息,可用于商品售卖信息统计、购物中心用户积分兑换及企业内部报销等场景

  • 涉农贷款地址识别

    涉农贷款地址识别,支持对私和对公两种方式。输入地址的行政区划越完整,识别准确度越高。

    涉农贷款地址识别,支持对私和对公两种方式。输入地址的行政区划越完整,识别准确度越高。

  • 人脸四要素

    根据给定的手机号、姓名、身份证、人像图片核验是否一致

    根据给定的手机号、姓名、身份证、人像图片核验是否一致

  • 个人/企业涉诉查询

    通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。

    通过企业关键词查询企业涉讼详情,如裁判文书、开庭公告、执行公告、失信公告、案件流程等等。

  • IP反查域名

    IP反查域名是通过IP查询相关联的域名信息的功能,它提供IP地址历史上绑定过的域名信息。

    IP反查域名是通过IP查询相关联的域名信息的功能,它提供IP地址历史上绑定过的域名信息。

0512-88869195
数 据 驱 动 未 来
Data Drives The Future