学习思维导图
前言
最近几年,前端技术发展迅速,涌现出了大量的框架和插件,在项目开发的过程中,大大小小框架要用到无数个,要想快速掌握这些框架的,前端的基础知识是必须要掌握的,不然太影响开发效率了.
而我个人记忆力有不太好,学了容易忘记,所以采有的学习方式是先学习资料,然后整理成思维导图。一来方便记忆,二来方便以后的复习。 这就是为什么一开始就上思维导图的原因。下面将根据思维导图来做一些详细说明。
JS数组的特点
数组大小可以动态变化。 部分编程语言(如java),创建数组时,必须要明确指定数组的大小(length),存储元素时,超出数组的大小会出异常,而JS不是这样的,数组定义时不需要指定数组大小(指定了也没什么用),存储元素时不用考虑到数组的大小以及下表值。
数组中可以存储不同类型的元素。 java语言,数组只能存储同一种类型的元素,要不全部是int、要不全部是String,而JS中的数组不是这样的,一个数组中可以同时存储int和String。
数组元素不是存储在一段连续的内存集合。 java语言,创建数组时,会根据数组的定义分配一段连续的内存用来存储元素,而JS中不是这样的,它的元素可能存储在不连续的内存区。
可参照下面代码加深理解:
var arr = new Array(2); //定义一个数组 arr[0] = 'a0'; arr[1] = 'a1'; arr[2] = 'a2'; //数组大小可动态变化,赋了3个元素 // var arr=['a1','a2','a3'] 定义数组推荐的方式 arr[4] = 4; //数组中的元素可以是不同类型 console.log(arr[3]); //undefined 不定义值也是可以的 arr[3] = 'a3';</span></span>
增加元素很简单,直接指定数组下标,然后赋值即可。这里主要描述下增加/删除数组元素相关的API。
push:将一个或多个新元素添加到数组结尾,并返回数组新长度
unshift:将一个或多个新元素添加到数组开始,数组中的元素自动后移,返回数组新长度
pop:移除最后一个元素并返回该元素值
shift:移除最前一个元素并返回该元素值,数组中元素自动前移
可参照下面代码加深理解:
console.log(arr.toString()); //a0,a1,a2,a3,4 Array重写了toString()方法 //当前对象是数组么? console.log(Object.prototype.toString.call(arr) === '[object Array]'); //true arr.push('p1'); //添加元素到数组结尾 console.log(arr.toString()); //a0,a1,a2,a3,4,p1 arr.unshift('unsf1'); //添加元素到数组开头 console.log(arr.toString()); //unsf1,a0,a1,a2,a3,4,p1 arr.pop(); // 删除掉数组结尾元素 console.log(arr.toString()); //unsf1,a0,a1,a2,a3,4 arr.shift(); //删除掉数组头元素 console.log(arr.toString()); //a0,a1,a2,a3,4</span></span>
这里主要描述两个API:
reverse:反转元素(最前的排到最后、最后的排到最前)。注意:此时是在原有的数组上进行修改
sort([compare]): 对数组元素进行排序。注意,排序时,首先会调用元素的toStirng()方法将元素转换成字符串,然后比较个元素的字符串形式进行最后的排序。
可参照下面代码加深理解:
var arr1 = [1,2,9,23,7]; var newArr = arr1.slice(0); //克隆arr1 不让arr1值受影响 // var newArr = arr1.contact(); 这样克隆也是可以的 newArr.reverse() //将数组倒过来 console.log(newArr.toString()); //7,23,9,2,1 newArr = arr1.slice(0); newArr.sort(); //将数组排序 console.log(newArr.toString()); //1,2,23,7,9 newArr = arr1.slice(0); newArr.sort(function(a,b){ //重新排序,我要的不是那个 return a - b; }); console.log(newArr.toString()); //1,2,7,9,23</span></span>
JS数组的其它API - splice
splice是数组中非常强大的一个方法,通过该方法,基本上可以对数组进行任何复杂的添加和删除操作,该方法参数主要分三段: 第一个参数为数组的起始下标,第二个参数为数组要删除元素的个数(0表示不删除),后面的参数为插入到数组的元素值(从第一个参数标识的起始下表后开始插入元素)。
可参照下面代码加深理解:
var arr2 = [1,2,9,23,27,5,4]; arr2.splice(3,2); //删除从下标为3开始的后2个元素 console.log(arr2.toString()); //1,2,9,5,4 // 在下标为为3后插入 in1 in2 in3 arr2.splice(3,0,'in1','in2','in3'); console.log(arr2.toString()); //1,2,9,in1,in2,in3,5,4 </span></span>
JS数组的其它API - every /filter /forEach /map
ECMAScript5为数组定义了这几个方法,每个方法都接收两个参数: 在数组每一项元素上运行的函数和函数的作用域对象(可选)。由于针对于这几个方法,部分浏览器是不支持的(如IE8以下),所以使用的使用要慎重。
every: 对数组中每一个元素都运行函数,如果该函数对每一项都返回true,则every执行结果为true
filter:对数组中每一个元素都运行函数,返回函数执行返回true的元素
forEach:对数组中每一个元素都运行函数,该方法没有返回值
map:对数组中每一个元素都运行函数, 返回由每次函数执行的结果组成的数组
可参照下面代码加深理解:
// arr2 = 1,2,9,in1,in2,in3,5,4 //只要数组里的类型为数字的元素 var arr3 = arr2.filter(function(ele,index,arr2) { return typeof ele == 'number'; }); // 现在数组里元素都是数字了吧? var isAllNumber = arr3.every(function(ele,index,arr3){ return typeof ele == 'number'; }); //注意:原数组的值是不变的 console.log(arr2.toString()); //1,2,9,in1,in2,in3,5,4 console.log(arr3.toString()); //1,2,9,5,4 console.log(isAllNumber); // true // 数组中每个元素都要翻10倍 var arr4 = arr3.map(function(ele,index,arr2) { return ele*10; }); console.log(arr4.toString()); //10,20,90,50,40 var arr5 = arr4.slice(1,3); //只要下标为2或3的元素 console.log(arr5.toString()); // 20,90 arr5.forEach(function(ele,index,arr){ console.log("模拟插入元素到数据库:"+ele); }); //模拟插入元素到数据库:20 //模拟插入元素到数据库:90</span></span>
总结
文章很大部分讲解的是数组的API,可能有些人比较奇怪和不屑,API有什么好说的,用的时候直接查文档就行了。我以前也是这么认为的,可以在开发的过程中,我发现查询API非常耗时,影响开发效率。还有个原因就是,我认为在采用一门编程语言进行业务实现时,不仅要让代码正确的运行,同时你的写的代码要符合这门语言的编码规范,语言要有可读性,例如,如果有个需求是要求在数组中插入2个元素时,如果你不知道splice方法,那很可能会采用for循环遍历数组实现数组的插入和移动。如果你的同事看到这些代码,是不是感觉很无语?
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关推荐
在Web前端开发中,数组是一种重要的数据结构,用于存储一系列有序的数据。本篇文章将深入探讨数组的基本操作,包括创建、访问、遍历以及一些高级操作,如获取最大值和转换为字符串。 首先,我们来看如何创建数组。...
例如,输出JavaScript数组的值,你可以使用`console.log()`函数: ```javascript let arr3 = ["水星", "金星", "地球"]; console.log(arr3[2]); // 输出"地球" ``` 在学习过程中,理解数组的概念及其操作是至关重要...
在Web前端开发中,虽然JavaScript(而不是PHP)是主要的脚本语言,但JavaScript同样支持数组,并且其定义和操作方式与PHP有相似之处。JavaScript的数组可以用`[]`定义,并且可以混合使用数字和字符串作为键,这在...
`node-array-diff-master`这个压缩包文件很可能是`Simple Array Diff`的源代码仓库。通过查看源代码,我们可以学习其内部实现,包括算法优化、错误处理以及如何暴露API等,这对于理解库的工作原理以及进行二次开发或...
总的来说,"is-any-array" 是一个针对前端开发的轻量级工具,它利用 `toString.call` 的特性来判断值是否为数组,解决了JavaScript中数组检测的不一致性问题。它的存在使得开发者在处理数组类型时更加得心应手,提高...
在"doublearray-master"这个压缩包中,包含了这个开源库的源码、示例、测试文件和其他相关资源。开发者可以通过解压并阅读源码,了解其内部实现细节,也可以直接引入项目中使用。通过这样的开源库,前端开发者可以...
"前端学习笔记-黑马程序员JS" ...这篇前端学习笔记涵盖了 JavaScript 的基础知识,包括变量、数据类型、运算符、流程控制、数组、函数、对象、内置对象和 Web APIs 等知识点,为学习 JavaScript 提供了系统的指导。
总之,"is-array-type" 是一个非常实用的前端开源库,它提高了我们检查数组和类数组对象的效率,使得在复杂的数据处理中能更加得心应手。理解并掌握这类工具,对于提升前端开发的质量和效率至关重要。
"object-to-array" 是一个开源库,专注于解决将JavaScript对象转换成数组的问题。这种转换在处理数据展示、数据操作或者需要遍历对象属性时非常有用。下面我们将深入探讨这个库的工作原理、应用场景以及如何使用它。...
"sorted-array" 是一个专门用于处理排序数组的前端开源库,它由JavaScript编写,旨在提供高性能的插入排序和二进制搜索功能,以优化在数组中的插入和删除操作。 首先,我们来了解一下John von Neumann的排序算法。...
"unordered-array-remove" 是一个前端开源库,专注于解决在无序数组中高效移除指定元素的问题,而无需借助数组的拼接操作。这个库对于那些需要频繁修改数组且关注性能的项目来说,是一个非常实用的工具。 在...
在"new-array-master"这个压缩包中,通常会包含源代码文件(如.js或.ts)、测试用例、README文档、许可证文件等。源代码文件会详细解释库的实现逻辑,测试用例则展示了如何使用这些功能,而README通常会提供快速入门...
**前端项目-d3-array** 是一个专注于数组操作的前端库,尤其在数据处理和可视化方面具有重要作用。D3(Data-Driven Documents)是JavaScript的一个强大库,它允许开发者使用数据来操作DOM(Document Object Model)...
**前端开源库-array-extended** 是一个专门为前端开发者设计的扩展JavaScript原生数组功能的库。这个库的主要目的是为了提供一套更加丰富、便捷且可链式操作的数组方法,以增强开发效率,使得处理数组数据时能有更...
JavaScript数组支持多种操作方法,如`push`(在末尾添加元素)、`pop`(移除并返回末尾元素)、`shift`(移除并返回首位元素)、`unshift`(在首位添加元素)、`slice`(截取子数组)、`splice`(插入、删除或替换...
在JavaScript开发中,处理数组数据是常见的任务,`arrayfilter`库为开发者提供了便利,帮助他们快速、简洁地完成对数组元素的筛选。 ### 数组过滤的常见需求 在前端开发中,我们经常遇到以下场景: 1. **数据筛选...
`string-array-master`这个文件名可能表示的是库的主分支或最新版本的源代码。如果你打算使用或研究这个库,可以通过查看源码来了解其实现细节,学习如何优雅地处理字符串数组问题。同时,阅读文档和示例代码可以...
总的来说,`array-iter-next-crnt`库为前端开发者提供了一种强大的数组迭代解决方案,它不仅提供了基本的逐项遍历功能,还能记住当前项,为复杂的数据处理提供了便利。在实际开发中,合理利用这种库可以提高代码的...
2. 导入库:在你的JavaScript代码中引入库,如`const inverse = require('array-inverse')`或现代模块系统中的`import inverse from 'array-inverse'`。 3. 使用逆阵功能:调用提供的函数,例如`inverse([1, 2, 3])`...
- **数据绑定**:`array-tabular`允许开发者将普通的JavaScript数组与表格视图绑定,自动更新视图以反映数组中的变化。 - **排序**:支持对表格中的列进行升序或降序排序,方便用户快速查找和理解数据。 - **过滤**...