前言:除了Object类型之外,Array类型恐怕是ECMAScript中最常用的类型了。而且,ECMAScript中数组与其他多数语言中的数组有很大差别,ECMAScript数组中的每一项可以保存任何类型的数据。同时,ECMAScript数组的大小也可以是动态调整的,即可以随着数据的自动增长以容纳新的数据。

  1. 创建数组的方式有两种,第一种是用构造函数 (可以省略new关键字)

new Array('red','blue','green');
Array('red','blue','green');

  备注:当用这种方式创建数组时,如果Array(), 里 面传的是一个数字,number,则表示是该数组的长度;如果是一个字符串,则表示该数组只有一个数据,例如

let arr1 = new Array(5);
console.log(arr1.length); //5
let arr2 = new Array('red');
console.log(arr2); //['red']

  另一种方式创建数组的方式:

let arr = ['red','blue','green'];

  2.  检测数组

  自从ECMAScript3做出规定以后,就出现了确定某个对象是不是数组的经典问题。对于一个网页,或者一个全局作用域而言,使用instanceof操作符能得到满意的结果。

let arr1 = new Array(5);
if(arr1 instanceof Array){
return 1;
}else {
return 0;
}  

  ECMAScript5 新增了Array.isArray()方法。这个方法的目的是最终确定某个值到底是不是数组,不管是不是全局作用域。

let arr1 = new Array(5);
Array.isArray(arr1); //true

  2.1 数组转换方法

  所有对象都具有toLocalString(), toString()和 valueOf()方法. 其中, 调用数组的toString()方法会返回数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串. 而调用valueOf()会返回数组本身.

let colors = ['red','blue','yellow'];
alert(colors); //"red", "blue", "yellow"
console.log(colors.toString()); // "red", "blue", "yellow"
console.log(colors.valueOf()); // ["red", "blue", "yellow"]
console.log(colors.toString() instanceof Array); // false
console.log(colors.valueOf() instanceof Array); // true

  备注: 在把数组colors传给alert方法时, colors会自动先执行 colors.toString(), 因此弹窗是一个字符串.

  3. 数组中常用方法总结

  3.1  push()和pop();

  push()方法可以接收任意数量的参数,把他们逐个添加到数组末尾,并且返回修改后数组的长度。而pop()方法则从数组末尾移除最后一项,减少数组的length值。

  

  3.2  shift()和unshift();

  shift()能够移除数组中第一个项并且返回该数组,同时将数组长度减1。unshift()与shift()相反,它能够在数组前端添加任意个项并返回新数组的长度。

  3.3  重排序方法

  reverse() 和sort() 可以直接用来重排序,reverse() 是将数组反转,得到一个新数组。sort()

---恢复内容结束---

  前言:除了Object类型之外,Array类型恐怕是ECMAScript中最常用的类型了。而且,ECMAScript中数组与其他多数语言中的数组有很大差别,ECMAScript数组中的每一项可以保存任何类型的数据。同时,ECMAScript数组的大小也可以是动态调整的,即可以随着数据的自动增长以容纳新的数据。

  1. 创建数组的方式有两种,第一种是用构造函数 (可以省略new关键字)

new Array('red','blue','green');
Array('red','blue','green');

  备注:当用这种方式创建数组时,如果Array(), 里 面传的是一个数字,number,则表示是该数组的长度;如果是一个字符串,则表示该数组只有一个数据,例如

let arr1 = new Array(5);
console.log(arr1.length); //5
let arr2 = new Array('red');
console.log(arr2); //['red']

  另一种方式创建数组的方式:

let arr = ['red','blue','green'];

  2.  检测数组

  自从ECMAScript3做出规定以后,就出现了确定某个对象是不是数组的经典问题。对于一个网页,或者一个全局作用域而言,使用instanceof操作符能得到满意的结果。

let arr1 = new Array(5);
if(arr1 instanceof Array){
return 1;
}else {
return 0;
}  

  ECMAScript5 新增了Array.isArray()方法。这个方法的目的是最终确定某个值到底是不是数组,不管是不是全局作用域。

let arr1 = new Array(5);
Array.isArray(arr1); //true

  3. 数组中常用方法总结

  3.1  push()和pop();

  push()方法可以接收任意数量的参数,把他们逐个添加到数组末尾,并且返回修改后数组的长度。而pop()方法则从数组末尾移除最后一项,减少数组的length值。  

  3.2  shift()和unshift();

  shift()能够移除数组中第一个项并且返回该数组,同时将数组长度减1。unshift()与shift()相反,它能够在数组前端添加任意个项并返回新数组的长度。

  3.3  重排序方法

  reverse() 和sort() 可以直接用来重排序,reverse() 是将数组反转,得到一个新数组。sort(), 在默认情况下, sort()方法默认排序顺序是根据字符串Unicode码点.

  码点具体参考: Unicode与JavaScript详解

    sort具体参考: MDN-Array.prototype.sort()

  例如: 默认排序示例,

let fruit = ['cherries', 'apples', 'bananas'];
fruit.sort();
// ['apples', 'bananas', 'cherries'] let scores = [1, 10, 21, 2];
scores.sort();
// [1, 10, 2, 21]
// 注意10在2之前,
// 因为在 Unicode 指针顺序中"10"在"2"之前 let things = ['word', 'Word', '1 Word', '2 Words'];
things.sort();
// ['1 Word', '2 Words', 'Word', 'word']
// 在Unicode中, 数字在大写字母之前,
// 大写字母在小写字母之前.

  语法:  arr.sort( compareFunction )

  如果没有指明 compareFunction ,那么元素会按照转换为的字符串的诸个字符的Unicode位点进行排序。例如 "Banana" 会被排列到 "cherry" 之前。当数字按由小到大排序时,9 出现在 80 之前,但因为(没有指明 compareFunction),比较的数字会先被转换为字符串,所以在Unicode顺序上 "80" 要比 "9" 要靠前。

  如果指明了 compareFunction ,那么数组会按照调用该函数的返回值排序。即 a 和 b 是两个将要被比较的元素:

  • 如果 compareFunction(a, b) 小于 0 ,那么 a 会被排列到 b 之前;
  • 如果 compareFunction(a, b) 等于 0 , a 和 b 的相对位置不变。备注: ECMAScript 标准并不保证这一行为,而且也不是所有浏览器都会遵守(例如 Mozilla 在 2003 年之前的版本);
  • 如果 compareFunction(a, b) 大于 0 , b 会被排列到 a 之前。
  • compareFunction(a, b) 必须总是对相同的输入返回相同的比较结果,否则排序的结果将是不确定的。

   综上所述,比较函数如下

function compareFunction(a,b) {
if(a < b){
return -1;
}
if(a == b){
return 0;
}
if(a > b){
return 1;
}
}

  因此如果要比较的是数字,这可以简写成

 function compareFunction(a,b) {
return a-b;
}

  举例说明

var numbers = [4, 2, 5, 1, 3];
numbers.sort(function(a, b) {
return a - b;
});
console.log(numbers); 也可以写成:
var numbers = [4, 2, 5, 1, 3];
numbers.sort((a, b) => a - b);
console.log(numbers); // [1,2,3,4,5]

  举例说明sort排序规则:

    下述示例创建了四个数组,并展示原数组。之后对数组进行排序。对比了数字数组分别指定与不指定比较函数的结果。

let stringArray = ["Blue", "Humpback", "Beluga"];
let numericStringArray = ["80", "9", "700"];
let numberArray = [40, 1, 5, 200];
let mixedNumericArray = ["80", "9", "700", 40, 1, 5, 200]; function compareNumbers(a, b)
{
return a - b;
} console.log('stringArray:' + stringArray.join()); // stringArray:Blue,Humpback,Beluga
console.log('Sorted:' + stringArray.sort()); // Sorted:Beluga,Blue,Humpback console.log('numberArray:' + numberArray.join()); // numberArray:40,1,5,200
console.log('Sorted without a compare function:'+ numberArray.sort()); // Sorted without a compare function:1,200,40,5
console.log('Sorted with compareNumbers:'+ numberArray.sort(compareNumbers)); // Sorted with compareNumbers:1,5,40,200 console.log('numericStringArray:'+ numericStringArray.join()); // numericStringArray:80,9,700
console.log('Sorted without a compare function:'+ numericStringArray.sort()); // Sorted without a compare function:700,80,9
console.log('Sorted with compareNumbers:'+ numericStringArray.sort(compareNumbers)); //Sorted with compareNumbers:9,80,700 console.log('mixedNumericArray:'+ mixedNumericArray.join()); // mixedNumericArray:80,9,700,40,1,5,200
console.log('Sorted without a compare function:'+ mixedNumericArray.sort()); // Sorted without a compare function:1,200,40,5,700,80,9
console.log('Sorted with compareNumbers:'+ mixedNumericArray.sort(compareNumbers)); //Sorted with compareNumbers:1,5,9,40,80,200,700

  当排序非 ASCII 字符的字符串(如包含类似 e, é, è, a, ä 等字符的字符串)。一些非英语语言的字符串需要使用 String.localeCompare。这个函数可以将函数排序到正确的顺序

let items = ['réservé', 'premier', 'cliché', 'communiqué', 'café', 'adieu'];
items.sort(function (a, b) {
return a.localeCompare(b);
}); // items is ['adieu', 'café', 'cliché', 'communiqué', 'premier', 'réservé']

   4 数组操作方法:  slice() 和 splice() 

  4.1   slice(start,end),基于当前数组中的一个或多个项创建一个新数组, 该方法不会修改原数组.

  如果slice() 方法的参数中有一个负数, 则用数组长度加上该数来确定相应的位置. 例如 在一个包含6个元素的数组中, 调用slice(-2,-1) 与调用slice(4,5)相同.

  如果结束位置小于开始位置,则数组返回空.

  举例说明:  

let arr = [1,2,3,4,5,6];
console.log(arr.slice()); // [1,2,3,4,5,6]
console.log(arr.slice(2)); //[3, 4, 5, 6]
console.log(arr.slice(2, 4)); // [3, 4] 相当于数学 [2,4) 包头不包尾
console.log(arr.slice(-2)); // [5,6]
console.log(arr.slice(-2, -1)); // [5]
console.log(arr.slice(-2, -4)); // []

  4.2 splice() 的主要用途向数组中部插入项.

  ⭕️ 删除: 可以删除任意数量的项,只需要指定2个参数: 要删除的第一项的位置和要删除的项数. 例如: splice(0,2)会删除数组中的前两项.

  ⭕️ 插入: 可以向指定位置插入任意数量的项,只需提供3个参数: 起始位置,0(要删除的项数),要插入的项. 如果要插入多个项,可以再传第四, 第五项, 以至多个项. 例如: splice(2,0,"red","blue") 会从当前数组的位置2开始插入字符串“red”和“blue”.

  ⭕️ 替换:  可以向指定位置插入任意数量的项, 且同时删除任意数量的项, 只需提供3个参数: 起始位置,要删除的项数,要插入的项.

let color = ['red','blue','orange'];
let remove1 = color.splice(0,1);
console.log(remove1); // ["red"]
console.log(color); //["blue", "orange"] let remove2 = color.splice(1,0,"green","black");
console.log(remove2); // []
console.log(color); // ["blue", "green", "black", "orange"] let remove3 = color.splice(1,2,"pink","white","purle");
console.log(remove3); // []
console.log(color); //["blue", "pink", "white", "purle", "orange"]

  5 迭代方法

  ⭕️ every() 对数组对每一项进行给定函数, 如果该函数对每一项返回true, 则返回true

  ⭕️ filter()  对数组对每一项进行给定函数, 返回该函数会返回true所组成对数组

  ⭕️ forEach() 对数组对每一项进行给定函数, 这个方法没有返回值

  ⭕️ map()  对数组对每一项进行给定函数, 返回每次函数调用对结果组成对数组

  ⭕️ some()  对数组对每一项进行给定函数, 如果该函数对任一项返回true, 则返回true

  6 归并方法 reduce(prev,cur,index,array) 和 reduceRight(prev,cur,index,array)

  这两个方法都会迭代数组都所有项, 然后构建一个最终都返回值. 其中, reduce()方法从数组都第一项开始, 挨个遍历到最后. 而reduceRight() 则从数组到最后一项开始, 向前遍历到第一项.  

  备注: 第一次迭代发生在数组到第二项上, 因此第一个参数是数组的第一项, 第二个参数是数组的第二项.

let arr = [12,32,4,3434,34,5];
let sum = arr.reduce(function (prev,curv,index,array) {
return prev+curv;
});
console.log(sum); //

随笔记录--Array类型的更多相关文章

  1. 随笔记录--RegExp类型

    阅读Javascript高级程序设计第五章 -- RegExp类型总结 对于基础教程部分, 有小伙伴不熟悉的,可以参考 正则表达式 - 教程 1. 基础部分回顾: ECMASript通过RegExp类 ...

  2. MapXtreme 随笔记录1

    最近在用MapXtreme做项目,随笔记录备忘. 声明:PubMapPara 静态类,后缀为静态类成员变量 1.加载地图 /// <summary> /// 地图工作空间文件路径 /// ...

  3. JS高程5.引用类型(2)Array类型

    Array类型: ECMAScript数组的每一项可以保存任何类型的数据,数组的大小是可以动态调整的. 创建数组的基本方式: (1)使用Array构造函数 var color=new Array(); ...

  4. 5.2 Array类型介绍

    Array类型是数组类型,Array(数组)类型也是引用类型中的一种. js 数组中的每一项可以保存任何类型的数据. js数组的大小/长度是可以动态调整的.如果你往数组中添加数据,数组长度会自动增加. ...

  5. JavaScript中Array类型方法总结

    Array类型是ECMAScript中最常用的类型之一,ECMAScript中的数组与其他多数语言中的数组有着相当大的区别.ECMAScript数组的每一项可以保存任何类型的数据.这里总结了数组类型的 ...

  6. Object类型与Array类型

    总结--JS中的引用类型: Object类型,Array类型,Boolean类型,Number类型,String类型,Date类型, Function类型,RegExp类型,单体内置对象(Global ...

  7. oracle Array类型作为参数传入函数(存储过程) 大字符串参数解决方案

    1. 创建自定义的类型.由于Oracle没有提供现成的array类型,这里用table类型来模拟. CREATE OR REPLACE TYPE varchar_array is Table OF v ...

  8. mongo中查询Array类型的字段中元素个数

    I have a MongoDB collection with documents in the following format: { "_id" : ObjectId(&qu ...

  9. 引用类型之Array类型

    Array类型 ECMAScript数组与其它语言数组一样,都是数据的有序列表.但是ECMAScript数组的每一项可以保存任何类型的数据.而且,ECMAScript数组是可以动态调整的. 1.创建和 ...

随机推荐

  1. postcss 将px转换成rem vuecli3+vant+vue+postcss

    1.安装 npm install postcss-pxtorem --save 2.找到postcss.config.js 默认是这样 module.exports = { "plugins ...

  2. C语言-memset()

    1. memset()函数原型是extern void *memset(void *buffer, int c, int count)        buffer:为指针或是数组, c:是赋给buff ...

  3. postgresql小计

    1. postgresql执行结束后,判断结果是否成功,有几种结果 typedef enum { PGRES_EMPTY_QUERY = 0, /* empty query string was ex ...

  4. Spring Cloud Zuul 精进

    接着上一篇继续讲Zuul,上一篇搭建了Zuul的环境简单说明了怎么使用,本篇查缺补漏将一些常用的配置贴出来.文末我们会一起分析一下Zuul的源码,升华一下本篇的格调! 忽略所有微服务或某些微服务 默认 ...

  5. SQL 实现地区的实现树形结构递归查询(无限级分类),level为节点层级,由小至大依次

    //SQL 实现地区的实现树形结构递归查询(无限级分类),level为节点层级,由小至大依次 2018-09-25 StringBuilder areaSQL = new StringBuilder( ...

  6. git强制推送命令

    git push -f origin master 注释: origin远程仓库名,master分支名,-f为force,意为:强行.强制. 这行命令的意思就是强制用本地的代码去覆盖掉远程仓库的代码, ...

  7. 快速排序详解(C语言/python)

    快速排序详解 介绍: 快速排序于C. A. R. Hoare在1960年提出,是针对冒泡排序的一种改进.它每一次将需要排序的部分划分为俩个独立的部分,其中一个部分的数比的数都小.然后再按照这个方法对这 ...

  8. xshell 快速复制粘贴的方法

    xshell快速复制粘贴的方法<img src="http://newmiracle.cn/wp-content/uploads/2017/01/QQ截图20170113163139- ...

  9. .net core 在 View 中使用 Jquery 无效问题

    问题描述: 在 View 视图中使用模板 _Layout.cshtml,其中模板已经调用了 Jquery.js ,但是在 View 视图下写 js 无效.后来通过浏览器查看自己写的 js 压根没加载出 ...

  10. 红米note7几个问题处理

    1.听筒声音很小,外放正常,试了很多种方法,最终可行的是吧听筒网灰尘弄一下. 2.SAICLink车机互联:需要打开USB调试.USB安装.USB调试(安全设置)(不开启这个的话会连接后就断开).默认 ...