Array方法

1、查找元素

  indexOf()用来查找传进来的参数在目标数组中是否存在。如果目标数组包含该参数,就返回该元素在数组中的索引;如果不包含,就返回-1。

  如果数组中包含多个相同的元素,indexOf()函数总是返回第一个与参数相同的元素的所有。有另外一个功能与之相似的函数:lastIndexOf(),该函数返回相同元素中最后一个元素的索引,如果没找到相同元素,则返回-1。

1.    var names = ["David", "Cynthia", "Raymond", "Clayton", "Jennifer"];
2.
3. var pos = names.indexOf("Raymond");
4. if (pos >= 0) {
5. console.log("Found Raymond at position " + pos);
6. } else {
7. console.log("Raymond not found in array.");
8. }
9.
10. // >>> 输出 Found Raymond at position 2

2、数组的字符串表示

  有两个方法可以将数组转化为字符串:join()和toString()。这两个方法都返回一个包含数组所有元素的字符串,各元素之间用逗号分隔开。

1.    var names = ["David", "Cynthia", "Raymond", "Clayton", "Jennifer"];
2.
3. var namestr = names.join();
4. console.log(namestr); // David,Cynthia,Raymond,Clayton,Jennifer
5.
6. namestr = names.toString();
7. console.log(namestr); // David,Cynthia,Raymond,Clayton,Jennifer

3、由已有数组创建新数组

  concat()和splice()方法允许通过已有数组创建新数组。Concat方法可以合并多个数组创建一个新数组,splice()方法截取一个数组的子集创建一个新数组。

  concat()方法的工作原理:该方法的发起者是一个数组,参数是另一个数组。作为参数的素组,其中的所有元素都被连接到调用concat()方法的数组后面。

1.    var cisDept = ["Mike", "Clayton", "Terrill", "Danny", "Jennifer"];
2. var dmpDept = ["Raymond", "Cynthia", "Bryan"];
3.
4. var itDiv = cis.concat(dmpDept);
5. console.log(itDiv); // ["Mike", "Clayton", "Terrill", "Danny", "Jennifer", "Raymond", "Cynthia", "Bryan"]
6.
7. itDiv = dmpDept.concat(cisDept);
8. console.log(itDiv); // ["Raymond", "Cynthia", "Bryan", "Mike", "Clayton", "Terrill", "Danny", "Jennifer"]

  splice()方法从现有数组里截取一个新数组。该方法的第一个参数是截取的起始索引,第二个参数是截取的长度。

1.    var itDiv = ["Mike", "Clayton", "Terrill", "Raymond", "Cynthia", "Danny", "Jennifer"];
2. var dmpDept = itDiv.splice(3, 3);
3.
4. console.log(dmpDept); // ["Raymond", "Cynthia", "Danny"]
5. console.log(cisDept); // ["Mike", "Clayton", "Terrill", "Jennifer"]

4、为数组添加元素

  有两个方法可以为数组添加元素:push() 和unshift()。push()方法会将一个元素添加到数组末尾。

1.    var nums = [1, 2, 3, 4, 5];
2. console.log(nums); // 1, 2, 3, 4, 5
3.
4. nums.push(6);
5. console.log(nums); // 1, 2, 3, 4, 5, 6

  和在数组的末尾添加元素比起来,在数组的开头添加元素更难。如果不利用数组提供的可变函数,则新的元素添加进来后,需要把后面的每个元素都相应地向后移一个位置。unshift()方法可以将元素添加在数组的开头。

1.    var nums = [2, 3, 4, 5];
2. console.log(nums); // 2, 3, 4, 5
3.
4. nums.unshift(1);
5. console.log(nums); // 1, 2, 3, 4, 5

5、从数组中删除元素

  使用pop()方法可以删除数组末尾的元素。使用shift() 方法可以删除数组的第一个元素。

1.    var nums = [1, 2, 3, 4, 5];
2. console.log(nums); // 1, 2, 3, 4, 5
3.
4. nums.pop();
5. console.log(nums); // 1, 2, 3, 4
6.
7. nums.shift();
8. console.log(nums); // 2, 3, 4

6、从数组中间位置添加和删除元素

  删除数组中的第一个元素和在数组开头添加一个元素存在同样的问题——两种操作都需要将数组中的剩余元素向前或向后移,然而splice()方法可以帮助我们执行其中任何一种操作。使用splice() 方法为数组添加元素,需提供如下参数:

  • · 起始索引(也就是你希望开始添加元素的地方);
  • · 需要删除的元素个数(添加元素时该参数设为0);
  • · 想要添加进数组的元素。
9.    var nums = [1, 2, 3, 7, 8, 9];
10. var newElements= [4, 5, 6];
11.
12. nums.splice(3, 0, newElements);
13. console.log(nums); // 1, 2, 3, 4, 5, 6, 7, 8, 9
14.
15. // 要插入数组的元素不必组织成一个数组,它可以是任意的元素序列
16. var nums1 = [1, 2, 3, 7, 8, 9];
17. nums1.splice(3, 0, 4, 5, 6);
18. console.log(nums); // 1, 2, 3, 4, 5, 6, 7, 8, 9
19.
20. // 使用splice()方法从数组中删除元素
21. var nums2 = [1, 2, 3, 100, 200, 300, 400, 4, 5];
22. nums2.splice(3, 4);
23. console.log(nums2); // 1, 2, 3, 4, 5

7、为数组排序

  reverse() 方法将数组中元素的顺序进行翻转。sort()方法时按照字典顺序对元素进行排序的,因此它嘉定元素都是字符串类型,即使元素时数字类型,也被认为是字符串类型。为了让sort()方法也能排序数字类型的元素,可以在调用方法时传入一个大小比较函数,排序时,sort()方法将会根据该函数比较数组中两个元素的大小,从而决定整个数组的顺序。

1.    // reverse()方法
2. var nums = [1, 2, 3, 4, 5];
3. nums.reverse();
4.
5. console.log(nums); // 5, 4, 3, 2, 1
6.
7. // sort()方法
8. var names = ["David", "Mike", "Cynthia", "Clayton", "Bryan", "Raymond"];
9. names.sort();
10. console.log(names); // Bryan, Clayton, Cynthia, David, Mike, Raymond
11.
12. var nums1 = [3, 1, 2, 100, 4, 200];
13. nums1.sort();
14. console.log(nums1); // 1, 100, 2, 200, 3, 4
15.
16. nums1.sort(function(num1, num2) {
17. return num1 - num2;
18. });
19.
20. console.log(nums1); // 1, 2, 3, 4, 100, 200

8、迭代器方法(不产生任何新数组)

  迭代器方法对数组中的每一个元素应用一个函数,可以返回一个值、一组值或者一个新数组。

1.    function square(num) {
2. console.log(num + '-' + num * num);
3. }
4.
5. var nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
6. nums.forEach(square);

  另一个迭代器方法是every(),该方法接收一个返回值为布尔类型的函数,对数组中的每个元素使用该函数。如果对于所有的元素,该函数均返回true,则该方法返回true。

1.    function isEven(num) {
2. return num % 2 == 0;
3. }
4.
5. var nums = [2, 4, 6, 8, 10];
6. var even = nums.every(isEven);
7.
8. if (even) {
9. console.log("all numbers are even.");
10. } else {
11. console.log("not all numbers are even.");
12. }
13.
14. // >>> 输出 all numbers are even.

  some()方法也接受一个返回值为布尔类型的函数,只要有一个元素使得该函数返回true,该方法就返回true。

1.    function isEven(num) {
2. return num % 2 == 0;
3. }
4.
5. var nums = [1, 3, 5, 9];
6. var even = nums.some(isEven);
7.
8. if (even) {
9. console.log("all numbers are even.");
10. } else {
11. console.log("no numbers are even.");
12. }
13.
14. // >>> 输出 no numbers are even.

  reduce()方法接收一个函数,返回一个值。该方法会从一个累加值开始,不断对累加值和数组中的后续元素调用该函数,直到数组中的最后一个元素,最后返回得到的累加值。

1.    function add(runningTotal, currentValue) {
2. return runningTotal + currentValue;
3. }
4.
5. var nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
6. var sum = nums.reduce(add);
7. console.log(sum); // 55

9、迭代器方法(生成新数组)

  有两个迭代器方法可以产生新数组:map()和filter()。map()和forEach()有点儿像,对数组中的每个元素使用某个函数。两者的区别是map()返回一个新的数组,该数组的元素是对原有元素应用某个函数得到的结果。

1.    var grades = [77, 65, 81, 92, 83];
2. var newGrades = grades.map(function(grade) {
3. return grade += 5;
4. });
5.
6. console.log(newGrades); // [82, 70, 86, 97, 88]

  filter()和every()类似,传入一个返回值为布尔类型的函数。和every()方法不同的是,当对数组中的所有元素应用该函数,结果均为true时,该方法并不返回true,而是返回一个新数组,该数组包含应用该函数后结果为true的元素。

1.    function isEven(num) {
2. return num % 2 == 0;
3. }
4.
5. function isOdd(num) {
6. return num % 2 != 0;
7. }
8.
9. var nums = [];
10. for (var i = 0; i < 20; i++) {
11. nums[i] = i + 1;
12. }
13.
14. var evens = nums.filter(isEven);
15. console.log("even numbers:");
16. console.log(evens); // [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
17.
18. var odds = nums.filter(isOdd);
19. console.log("odd numbers:");
20. console.log(odds); // [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

JavaScript —— 数组的更多相关文章

  1. Javascript数组操作

    使用JS也算有段时日,然对于数组的使用,总局限于很初级水平,且每每使用总要查下API,或者写个小Demo测试下才算放心,一来二去,浪费不少时间:思虑下,堪能如此继续之?当狠心深学下方是正道. 原文链接 ...

  2. Javascript数组操作(转)

    1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限, ...

  3. JavaScript 数组

    JavaScript 数组 简介:数组是值的有序集合,JavaScript在同一个数组中可以存放多种类型的元素,而且是长度也是可以动态调整的,可以随着数据增加或减少自动对数组长度做更改. 一:创建数组 ...

  4. 也谈面试必备问题之 JavaScript 数组去重

    Why underscore (觉得这部分眼熟的可以直接跳到下一段了...) 最近开始看 underscore.js 源码,并将 underscore.js 源码解读 放在了我的 2016 计划中. ...

  5. js 判断数组包含某值的方法 和 javascript数组扩展indexOf()方法

    var  questionId = []; var anSwerIdValue = []; ////javascript数组扩展indexOf()方法 Array.prototype.indexOf ...

  6. JavaScript 数组 length 属性获取数组长度或设置数组元素的数目

    JavaScript 数组 length 属性 JavaScript 数组 length 属性可返回或设置或组中元素的数目,语法如下: array_object.length 利用 length 属性 ...

  7. 【读书笔记】-- JavaScript数组

    数组是一段线性分配的内存,它通过整数计算偏移并访问其中的元素.大多数的语言都会要求一个数组的元素是相同类型,但JavaScript数组可以包含任意类型. var misc = ['string', n ...

  8. 什么才是正确的javascript数组检测方式

    前面的话 对于确定某个对象是不是数组,一直是数组的一个经典问题.本文专门将该问题择出来,介绍什么才是正确的javascript数组检测方式 typeof 首先,使用最常用的类型检测工具——typeof ...

  9. javascript数组对象排序

    javascript数组对象排序 JavaScript数组内置排序函数 javascript内置的sort函数是多种排序算法的集合 JavaScript实现多维数组.对象数组排序,其实用的就是原生的s ...

  10. javascript数组的知识点讲解

    javascript数组的知识点讲解 阅读目录 数组的基本方法如下 concat() join() pop() push() reverse() shift() sort() splice() toS ...

随机推荐

  1. select for update引发死锁分析

    本文针对MySQL InnoDB中在Repeatable Read的隔离级别下使用select for update可能引发的死锁问题进行分析. 1. 业务案例 业务中需要对各种类型的实体进行编号,例 ...

  2. 兼容IE8及以上的常用css选择器

    p~ul//位于p元素后边的ul div>p div+p//紧接在 <div> 元素之后的所有 <p> 元素 [attribute]//[target]选择带有 targ ...

  3. JFreeChart柱状图单组柱子的不同颜色显示

    JFreeChart柱状图中单组柱子用不同颜色来显示的实现方法是自定义一个Renderer来继承BarRenderer类,然后重载getItemPaint(int i,int j)方法. 实现效果如下 ...

  4. Graphviz安装及简单使用

    Graphviz Windows环境安装: 1.官网下载 官网下载地址 2.配置环境变量 将graphviz安装目录下的bin文件夹添加到Path环境变量中: 3.验证是否安装并配置成功 进入wind ...

  5. UVA12171-Sculpture(离散化+floodfill)

    Problem UVA12171-Sculpture Accept: 196  Submit: 1152 Time Limit: 3000 mSec Problem Description Imagi ...

  6. 【转】Android 关于arm64-v8a、armeabi-v7a、armeabi、x86下的so文件兼容问题

    转载地址:http://blog.csdn.net/ouyang_peng/article/details/51168072 Android 设备的CPU类型(通常称为”ABIs”) x86: 平板. ...

  7. 【转】BAT批处理中的字符串处理详解(字符串截取)

    下面对这些功能一一进行讲解. 1.截取字符串 截取字符串可以说是字符串处理功能中最常用的一个子功能了,能够实现截取字符串中的特定位置的一个或多个字符.举例说明其基本功能: @echo off set ...

  8. 看不懂霍尔效应的直接看视频https://www.bilibili.com/video/av11446173/

    霍尔效应: 有些手机带有皮盖,就是皮盖打开的时候手机自动亮屏,皮盖和上的时候手机自动黑屏,利用的就是霍尔传感器,其实皮盖里面就是有个小磁铁而已: 当然了霍尔效应的电压也就几个毫伏,很小,所以得放大才能 ...

  9. JSON构造/解析(by C)---cJSON和json-c

    背景 JSON即JavaScript Object Notation,是一种轻量级的数据交换格式. JSON建构于两种结构: "名称/值"对的集合(A collection of ...

  10. ESP8266 wifi钓鱼

    原文链接: https://www.cnblogs.com/xiaowuyi/p/6980072.html https://www.cnblogs.com/xiaowuyi/p/7110652.htm ...