前言:除了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. 使用CSS隐藏元素滚动条

    如何隐藏滚动条,同时仍然可以在任何元素上滚动? 首先,如果需要隐藏滚动条并在内容溢出时显示滚动条,只需要设置overflow:auto样式即可.想要完全隐藏滚动条只需设置overflow:hidden ...

  2. [HeadFrist-HTMLCSS学习笔记]第七、八章

    [HeadFrist-HTMLCSS学习笔记]第七章CSS入门:加一点样式 重点噻 段落添加背景颜色 p{ background-color: red; } 文本颜色 p{ color: ,maroo ...

  3. CUDA 到底什么玩意

    * CUDA与cuDNN * 什么是CUDA * CUDA(ComputeUnified Device Architecture),是显卡厂商NVIDIA推出的运算平台. CUDA是一种由NVIDIA ...

  4. BitSet源码

    public class BitSet1 implements Cloneable, java.io.Serializable { // >>>左边补0, << 右边补0 ...

  5. SQLServer---------使用Excel 往sqlServer数据库中导入数据

    1.右击创建好的表选择编辑200行 2.保证Excel的字段顺序与数据中顺序一致 3.选中好了后进行复制 4.打开文本   一个快捷方式 将excel 中的数据 黏贴放到文本中 5.点击sql    ...

  6. DestroyImmediate和Destroy

    DestroyImmediate立即对对像进行销毁并从内存中移除: Destroy销毁场景中的物体,但内存中还存在,当令它需要销毁时,只是给一个标识.而内存中它依然是存在的,只有当内存不够,或一段时间 ...

  7. [转帖]direct path read直接路径读

    direct path read直接路径读 http://blog.itpub.net/12679300/viewspace-1188072/ 原创 Oracle 作者:wzq609 时间:2014- ...

  8. mysql启动报错 "unknown variable 'defaults-file=/etc/my.cnf"

    使用指定的my.cnf,而不用默认的/etc/my.cnf文件,可以在启动时,在mysqld_safe后加上参数--default-file=/usr/local/server/mysql2/etc/ ...

  9. @Valid参数验证 BindingResult result 的使用

    1.首先导入依赖包bean-validator.jar2.在实体类上面写一些相关的验证信息:可以搜索更多的一些验证方式,这只是一部分 可以参考:点击打开链接http://blog.csdn.net/c ...

  10. Visual Studio pro key license 2019

    仅供学习交流使用,勿用作其他用途!!!!   Visual Studio 2019 Enterprise BF8Y8-GN2QH-T84XB-QVY3B-RC4DF Visual Studio 201 ...