JavaScript初探 (三)

JavaScript数组

定义

创建数组

  • var 数组名 = [元素0,元素1,元素2,……] ;
var arr = ["Huawei","China","Mirror"];

同时JavaScript也支持 new Array 创建数组。但是建议使用上面的文本方式创建数组

数组访问

  • 通过引用 索引号(下标) 来引用某个数组元素
var name = arr[0];
// name = Huawei

ps:数组的索引是从 0 开始的

  • 可以直接使用数组名不加索引属性,直接访问所有数组内容
var arr = ["Huawei","China","Mirror"];
document.getElementById("demo").innerHTML = arr ;
// 结果输出: Huawei,China,Refueling

更新数组元素

  • 直接使用数组索引赋值方式,就可更改数组内元素

数组是对象

  • typeof arr_name 会返回 object

    JavaScript的数组实际上是一种对象的表现,但是

    数组最好还是以数组方式来描述

  • 两者的区别:

    • 数组是利用索引位置访问数组内容属性的
    • 对象是利用对象属性名来访问属性名对象的属性值的
  • 数组元素可以是对象:

    由于数组的特点,数组是特殊类型的对象

    故此,可以在数组中存放不同类型的变量

    可以数字、字符串、函数、函数……

    而且,还可以在数组中存储另一个数组

数组属性

length属性
  • length:返回数组的长度(数组的元素数目)
var arr = ["Huawei","China","Mirror"];
arr.length;
// 结果:返回 3

由于arr索引是从零开始,而length数目计算是从1开始的

所以length-1 === 数组最后一个元素的下标索引

  • 访问数组最后一个元素的技巧:
var arr[arr.length - 1] ;
// 结果返回 Mirror
遍历数组
  • 遍历数组理论上最好的是使用 for 循环
var arr = ["Huawei","China","Mirror"];
var text = "<ul>";
for(i = 0 ; i < arr.length-1 ; i ++){
text += "<li>" + arr[i] + "</li>";
}
Array.foreach()
var arr = ["Huawei","China","Mirror"];
var text ;
text = "<ul>";
arr.forEach(myArr);
text += "</ul>";
function myArr(value){
text += "<li>" + value + "</li>";
}
添加元素:push()
  • push():向数组添加新元素的最佳方法就是push()方法
var arr = ["Huawei","China","Mirror"];
arr.push("Refueling");
  • 手动添加元素
arr[arr.length] = ("Refueling");
// 或者
arr[x] = ("Refueling");
关联数组
  • 在JavaScript中只支持数字索引;并不支持命名索引方法
var arr = [];
arr[0] = "Huawei";
arr[1] = "China";
arr[2] = "Refueling";
var x = arr.length ; //返回 3
var y = arr[0]; //返回 Huawei
  • 如果使用了命名索引,则会把数组重定义为 对象
var arr = [];
arr["A"] = "Huawei";
arr["B"] = "China";
arr["C"] = "Refueling";
var x = arr.length ; // 返回 0
var y = arr[0] ; //返回 undefined
对象和数组的区别
  • 在JavaScript中,数组 使用数字索引

  • 在JavaScript中,对象使用命名索引

  • 对象和数组的不同应用

    如果希望元素名为字符串(文本),则使用对象

    如果希望元素名数字,则使用数组

  • 避免 new Array()

    没有必要使用内建数组构造器 new Array()

识别数组变量
  • 我们用 typeof 判断数组数据类型的时候,会返回 object ,因为数组是特殊的对象,但是还是区分不了对象和数字变量。我们可以使用数组的内建:Array.isArray()方法

数组方法

toString() 数组输出
  • 将数组转为字符串值输出(元素间逗号分隔)
var arr = ["Huawei","China","Mirror"];
document.getElimentById("demo").innerHTML = arr.toString();
// 结果:Huawei,China,Mirror
join() 数组输出
  • join(c):将所有数组元素结合为一个字符串;同时还可以规定分隔符 c
var arr = ["Huawei","China","Mirror"];
document.getElimentById("demo").innerHTML = arr.join("&");
// 结果:Huawei&China&Mirror
Popping()(删除元素)
  • pop():从数组中删除最后一个元素
var arr = ["Huawei","China","Mirror"];
arr.pop(); //删除最后一个元素 Mirror

pop():返回被删除的那个数

Pushing()(添加元素)
  • push():在数组的最后一个数组元素,向数组后添加一个新元素
var arr = ["Huawei","China","Mirror"];
arr.push("Refueling"); // 添加 Refueling到数组中,并返回最新数组的长度

push():返回新数组的长度

位移元素(开头元素添/删)
  • shift():删除首个数组元素,并把所有其他元素”位移“到更低的索引
var arr = ["Huawei","China","Mirror"];
arr.shift(); // 返回 Huawei

shift() 返回被移出(删除)的元素

  • unshift():在数组开头添加元素 ,并把所有其他元素向后”位移“索引标志
var arr = ["Huawei","China","Mirror"];
arr.unshift("Refueling"); // 返回 新的数组长度 5

unshift():返回新的数组长度

更改元素
  • 通过对应的索引号引用直接赋值,来改变该索引位置的元素内容
删除元素 delete
  • JavaScript 数组属于对象类型,其中的元素可以使用 JavaScript delete 运算符来删除
var arr = ["Huawei","China","Mirror"];
delete arr[0]; //把 "Huawei" 改为 undefined

不建议使用delete运算符,可以使用pop() 或 shift() 代替

原因:后者的数组方法,会自动抹除数组索引,而delete则会保留索引并导致空洞

拼接数组 splice()
  • splice():用于向数组添加新项
var arr = ["Huawei","China","Mirror"];
arr.splice(2,0,"Refueling","Hello");

第一个参数:定义添加新元素的位置

第二个参数:定义应删除多少元素

其余参数:定义要添加的新元素

  • splice():删除元素
var arr = ["Huawei","China","Mirror"];
arr.splice(0,1); // 删除 arr 数组中的第一个元素

第一个参数:定义新元素添加的元素

第二个参数:定义删除多个元素

其余参数: 被忽略,没有新元素添加

splice()会返回被删除的元素

而原数组的内容就会被修改

合并数组 concat()
  • concat():通过合并(连接)现有数组来创建一个新数组
var str1 = ["Huawei","Refueling"];
var str2 = ["China","Refueling"];
var myStr = str1.concat(str2) ; // 连接 str1 和 str2

Array1.concat(Array2,……)

同样的,concat()也可以和数值合并

array1.concat([值,……])

裁剪数组 slice()
  • slice():裁剪数组的某个片段,返回一个新的数组
var arr = ["Huawei","China","Refueling","Hello","World"];
var array = arr.slice(1);
var array = arr.slice(1,3);

第一个元素:裁剪的开始位置

第二个元素:裁剪的结束位置

若第二个元素被省略,

则从开始的位置截取到数组的最后一个元素


JavaScript数组排序

排序 sort()

  • sort():按照ASCII顺序对数组(字符和数字)进行升序排序
var arr = ["Huawei","China","Refueling","Hello","World"];
arr.sort();
// 结果:China,Hello,Huawei,Refueling,World

反转数组 reverse()

  • reverse() :将数组中的所有元素反转
var arr = ["Huawei","China","Refueling","Hello","World"];
arr.reverse()
  • 利用 sort() + reverse() 对数组进行降序排序
var arr = ["Huawei","China","Refueling","Hello","World"];
arr.sort();
arr.reverse();

比值函数 *

  • 比较函数目的是定义另一种排序顺序

  • 比较函数应该返回一个负、零或正值,这取决于参数

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

sort() 函数比较两个值时,会将值发送到比较函数,并根据返回的值,对这些值进行排序。

  • 实例:

    当比较 40 和 100 时,sort() 方法会调用比较函数 function(40,100)

    该函数计算 40 - 100 ,然后返回一个 负值

    排序函数将40排序为比100更低的值

    <div>
<button onclick="myFunction1()">字母顺序</button>
<button onclick="myFunction2()">数字顺序</button>
<p id = "demo"></p>
</div>
<script>
var points = [40,100,1,5,25,10] ;
document.getElementById("demo").innerHTML = points ; function myFuntion1() {
points.sort();
document.getElementById("demo").innerHTML = points ;
} function myFuntion2() {
points.sort(function(a,b){return a - b}) ;
document.getElementById("demo").innerHTML = points ;
}
</script>

以随机顺序排序

var points = [40,100,1,5,25,10] ;
points.sort(function(a,b){return 0.5 - Math.random()});

原理就是:0.5减去一个随机数

查找最值

Math.max()

  • Math.max.apply:查找数组中的最高值
function myArrayMax(arr) {
return Math.max.apply(null,arr);
}

Math.max.apply([1,2,3]) === Math.max(1,2,3)

Math.min()

  • Math.min.apply:查找数组中的最小值
function myArrayMin(arr) {
return Math.min.apply([null,arr]);
}

Math.min.apply([1,2,3]) === Math.min(1,2,3)

自定义的max和min

function myArrayMax(arr) {
var len = arr.length ;
var max = -Infinity ; //最小的负值
while (len --) {
if (arr[len] > max) {
max = arr[len] ;
}
}
return max ;
}
function myArrayMin(arr) {
var len = arr.length ;
var min = Infinity ;
while (len --) {
if (arr[len] < min) {
min = arr[len];
}
}
return min ;
}

排序对象数组

  • JavaScript 数组的定义中,是允许存储对象的;
var cars = [
{name:"HUAWEI",age:"good"},
{name:"MI",age:"where"},
{name:"Java",age:"No:1"}
];

即使对象拥有不同数据类型的属性,sort()方法仍然可以对数组进行排序

解决方法就是利用比较函数对比属性值

cars.sort(function(a,b){return a.year - b.year});

通过比较函数,将属性中的属性值内容进行对比


JavaScript 数组迭代方法

Array.forEach()

  • forEach():为每个数组元素调用一次函数(回调函数)
var txt = "" ;
var number = [45,4,9,16,25] ;
numbers.forEach(myFunction) ; function myFunction (value , index , array) {
txt += value + "<br>" ;
}
  • 注释:

    • 项目值
    • 项目索引
    • 数组本身

上述代码的作用:数组中每个值传递并调用函数

Array.map()

  • map():通过对每个数组元素执行函数来创建数组
  • map():不会对没有值的数组元素执行函数
  • map():不会改变原始数组
var number1 = [45,4,9,16,25] ;
var number2 = number1.map(myFunction) ;
function myFunction(value,index,array){
return value * 2 ; // 数组中的元素 * 2 并返回
}
  • 注释:

    • 项目值
    • 项目索引
    • 数组本身

Array.filter()

  • filter():创建一个包含通过测试的数组元素的新数组
var number = [45,4,9,16,25] ;
var over18 = number.filter(myFunction) ;
function myFunction(value , index , array){
return value > 18 ; // 返回大于18的数组元素并组成一个新数组
}
  • 注释:

    • 项目值
    • 项目索引
    • 数组本身

Array.reduce()

  • reduce():在每个数组元素上运行函数,生成单个值;方法在数组中从左到右运行;不会改变原始的数组。
var number = [45,4,9,16,25] ;
var sum = number.reduce(myFunction) ;
function myFunction(total , value , index , array){
return total + value ;
}
  • 注释:

    • 总数(初始值/先前返回的值)
    • 项目值
    • 项目索引
    • 数组本身

reduce():方法能够接收一个初始值

Array.reduceRight()

  • reduce() 类似

Array.every()

  • every():检查所有数组值是否可以通过测试
var number = [45,4,9,16,25] ;
var allOver18 = number.every(myFunction) ;
function myFunction(value , index , array) {
return value > 18 ;
}

Array.some()

  • some():检查某些数组值是否通过测试
var number = [45,4,9,16,25] ;
var someOver18 = number.some(myFunction) ;
function myFunction(value , index , array) {
return value > 18 ;
}

Array.indexOf()

  • indexOf():在数组中搜索元素值并返回其位置
var number = [45,4,9,16,25] ;
var a = number.indexOf(45);

array.indexOf(item,start)

​ item:必须,要检索的项目

​ start:可选,检索的起点

未找到项目,返回 -1

如果搜索的内容出现多次,则返回第一个出现的位置

Array.lasIndexOf()

  • lasIndexOf():和indexOf()功能类似,不同的是,从数组结尾开始搜索

Array.find()

  • find():返回通过测试函数的第一个数组元素的值
var number = [45,4,9,16,25] ;
var first = number.find(myFunction) ;
function myFunction(value , index , array) {
return value > 18 ;
}

Array.findIndex()

  • findIndex():返回通过测试函数的第一个数组元素的下标索引
var number = [45,4,9,16,25] ;
var first = number.findIndex(myFunction) ;
function myFunction(value , index , array){
return value > 18 ;
}

JavaScript初探 三 (学习js数组)的更多相关文章

  1. 初探JavaScript(三)——JS带我"碰壁"带我飞

    已经写了两篇关于小白的JavaScript之行,不可否认,每一种语言都有其精华与糟粕之处,来不及细细体味其精华奥妙,也没法对其评头论足,只能先了解,后深入.到目前为止已经看完<JavaScrip ...

  2. JavaScript初探三

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...

  3. JavaScript初探之字符串与数组

    一直在研究JS以至于忘记跟新博客... 字符串:// str.charAt(x); //获取下标为x的字符// str.indexOf(",",1); //获取",&qu ...

  4. 廖雪峰官网学习js 数组

    indexOf( )    某字符的位置 slice 相当于string 的substring 切片 a = ['a','b',1,2,3] (5) ["a", "b&q ...

  5. JavaScript学习(一) —— 环境搭建与JavaScript初探

    1.开发环境搭建 本系列教程的开发工具,我们采用HBuilder. 可以去网上下载最新的版本,然后解压一下就能直接用了.学习JavaScript,环境搭建是非常简单的,或者说,只要你有一个浏览器,一个 ...

  6. 学习javascript数据结构(三)——集合

    前言 总括: 本文讲解了数据结构中的[集合]概念,并使用javascript实现了集合. 原文博客地址:学习javascript数据结构(三)--集合 知乎专栏&&简书专题:前端进击者 ...

  7. 初探JavaScript(二)——JS如何动态操控HTML

    除去五一三天,我已经和<JavaScript Dom编程艺术>磨合了六天,第一印象很好.慢慢的,我发现这是一块排骨,除了肉还有骨头.遇到不解的地方就会多看几遍,实在不懂的先跳过,毕竟,初次 ...

  8. javaScript数组的三种属性—数组索引、数组内置属性、数组自定义属性

    JS数组也是一种对象. 我们用JavaScript处理的所有东西,都可以视为是一种对象. JavaScript中有两种数据类型,基本类型数对象类型,但是基本类型基本都是包括在对象类型之中的. 数组.函 ...

  9. JavaScript的使用以及JS常用函数(JS 遍历数组和集合)

    JavaScript入门 学习总结 1. 什么是 JavaScript 2. JavaScript 的特点 3. JS的使用 编写位置 基本语法 变量 打印变量 数据类型 innerHTML和inne ...

随机推荐

  1. Elasticsearch 6.x版本全文检索学习之聚合分析入门

    1.什么是聚合分析? 答:聚合分析,英文为Aggregation,是es除搜索功能外提供的针对es数据做统计分析的功能.特点如下所示: a.功能丰富,提供Bucket.Metric.Pipeline等 ...

  2. C#-Excel导入工资条群发邮箱

    第一次写随笔,一名在实习的程序猿,做的一个小应用,需要的朋友可以参考参考, 使用WinForm实现了一个导入Excel,群发工资条的功能.功能已经实现,还不够完善,. 大致运用了OleDbConnec ...

  3. Python中Collections模块的Counter容器类使用教程

    1.collections模块 collections模块自Python 2.4版本开始被引入,包含了dict.set.list.tuple以外的一些特殊的容器类型,分别是: OrderedDict类 ...

  4. 网络协议 2 - IP 地址和 MAC 地址

    了解完网络协议,我们会发现,网络通信的五层模型里,有两个很重要的概念:IP 地址和 MAC 地址. 那么 IP 地址是怎么来的,又是怎么没的?MAC 地址与 IP 地址又有什么区别? 这回答上面问题前 ...

  5. .netcore2.1 使用IdentityServer4 生成Token验证

    每个新技术权限验证都有一套机制,之前项目WebApi接口权限验证用的是Owin做为权限验证,而.netcore权限限制使用的是IdentityServer4,采用JWT的方法验证token. 首先使用 ...

  6. 松软科技web课堂:JavaScript 数组

    JavaScript 数组用于在单一变量中存储多个值. 实例 var cars = ["Saab", "Volvo", "BMW"]; 什么 ...

  7. jQuery基础之表单验证

    在使用jquery-validate.js插件时可以做一些初始化配置在初始化jquery-validate.js对象的时候,将外部的一些配置和该插件内部的一些默认配置合并在一起,如果有相同的配置,前者 ...

  8. Redis之高可用、集群、云平台搭建(非原创)

    文章大纲 一.基础知识学习二.Redis常见的几种架构及优缺点总结三.Redis之Redis Sentinel(哨兵)实战四.Redis之Redis Cluster(分布式集群)实战五.Java之Je ...

  9. Fiddler应用——使用Fiddler修改指定request/response报文

    Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,分析数据,设置断点,修改请求/响应数据,查看所有的“进出”Fiddler的数据(指cookie,h ...

  10. 3天学会kettle -全网最全的kettle教程

    从资源库开始,详细讲解了kettle的所有控件的用法,无论你是开发人员.运维人员还是测试人员. 通过此教程都可以很快速的掌握kettle,再加上笔者的实例,3天学会kettle的实战操作. 欢迎关注公 ...