热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【读书笔记】javascript之数组操作

一、使用数组1.1创建数组通过[]操作符声明一个数组变量:varnumbers[];在生命数组变量时,直接在[]操作符内放入一组元素:varnumbers[1,2,3,4,

一、使用数组

1.1 创建数组

  • 通过[ ]操作符声明一个数组变量:
var numbers=[];
  • 在生命数组变量时,直接在[]操作符内放入一组元素:
var numbers=[1,2,3,4,5];
  • 调用Array的构造函数创建数组,在调用Array的构造函数时,可以只传入一个参数,用来指定数组的长度:
var numbers=new Array(); //创建一个数组
var numbers= new Array([size]);

例子:

var numbers=new Array(10); 
print(numbers.length);
//创建一个数组并指定长度,注意不是上限,是长度;

Ps:可以调用Array.isArray()来判断一个对象是否是数组


1.2 读写数组

通过使用数组的length属性来控制循环次数,而不是直接使用数字。Javascript中的数组也是对象,数组的长度可以是任意增长,超过其创建时指定的长度。length属性反映当前数组的元素个数。


1.3 由字符串生成数组

调用字符串对象的split()生成数组,通过分隔符比如单词空格将一个字符串分成几个部分,并将每部分作为一个元素保存在一个新建的数组中。

var sentence=“the little dog”;
var words=sentence.split();
for (var i=0;i<words.length;i++){
print("word"+i+":"+words[i]);
}

输出为:

word 0: the
word 1: little
word 2: dog

1.4 对数组的整体性操作

主要分为两种方法:

  • 浅复制
    当一个数组赋给另一个数组时,只是为被赋值的数组增加一个新的引用,仿通过原引用修改数组的值时,另一个引用也会变化。
例子:
var nums=[];
for(var i=0;i<100;i++){
nums[i]=i+1;
}
var samenums=nums;
nums[0]=400;
print(samenums[0]); //显示400
  • 深复制
    将原数组中的每一个元素都复制到一份到新数组中。
var nums=[];
for(var i=0;i<5;i++){
nums[i]=i+1;
}
var samenums=[];
copy(nums,samenums);
nums[0]=400;
print(samenums[0]); //显示1

另一个将数组视为整体的操作是print()函数,用它可以显示数组中的元素。


二、存取函数

2.1 查找元素

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

ps:数组中包含多个相同元素,indexOf()总返回第一个与参数相同的元素的索引。

  • lastIndexOf()
    该函数返回相同元素中最后一个元素的索引,若没找到相同元素,则返回-1;

2.2数组的字符串表示

两个方法都返回一个包含数组所有元素的字符串,各元素之间用逗号隔开
- join()
- toString()

var names=["hling","honey","sun"];
var namestr1=name.join();
print(namestr1); //hling,honey,sun
var namestr2=name.toString();
print(namestr2); //hling,honey,sun

ps:直接对数组使用print()函数时,系统会自动调用toString()方法。


2.3 由已有数组创建新数组

  • concat(); //发起者是一个数组,参数是另一个,注意是一个新的数组,不是指向

  • splice(); //从现有数组里截取一个新数组,可以为一个数组增加或者移除元素;


三、可变函数

3.1 为数组添加元素

push()将一个元素添加到数组末尾;
unshift()将元素添加到数组的开头;


3.2从数组中删除元素

pop()方法删除数组末尾的元素;(和push()一起,堆栈,后进先出),删除并返回数组的最后一个元素。
shift()方法可以删除数组,如果数组是空的,那么 shift() 方法将不进行任何操作,返回 undefined 值,删除并返回数组的第一个元素。


3.3为数组排序

  • reverse()
    该方法将数组中元素的顺序进行翻转;
  • sort()
    sort()方法按照字典顺序对元素进行排序,因此假定的是字符串类型.
var nums=[3,1,2,100,4,200];
nums.sort();
print(nums);
//1,100,2,200,3,4

为了让sort()方法也能排序数字类型,可以再调用方法时传入一个大小比较函数。通过比较函数中两个元素的大小,从而决定整个数组的大小。

function compare(num1,num2){
return num1-num2;
//num1-num2递增顺序,若num2-num1位递减顺序;
}
var nums=[3,1,2,100,4,200];
nums.sort(compare);
print(nums);
//1,2,3,4,100,200

四、迭代器方法

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

4.1不生成新数组的迭代器方法

  • forEach()

该方法接受一个函数作为参数,对数组中的每个元素使用该函数。

function aquare(num){
print(num,num*num);
}
var nums=[1,2,3];
nums.forEach(square);

//程序输出为:
1 1
2 4
3 9

  • every()
    该方法接受一个返回值为布尔类型的函数,对数组中的每个元素使用该函数。对于所有的元素,该函数返回true,只要有一个元素返回false,则该方法返回false。
function isEven(num){
return num %2==0;
}
var nums=[2,4,6];
var even=nums.every(isEven);
if(even){
print("all numbers are even");
}
else{
print("not all numbers are even");
}
//输出为:
all numbers are even
//将数组换为var nums2=[2,3,4,6];则输出结果则为:
not all numbers are even

  • some()
    some()方法接受一个返回值为布尔类型的函数,只要有一个元素使得该函数返回true, 该方法返回true。
function isEven(num){
return num%2==0;
}
var nums=[1,2,3,4,5,6];
var someEven=nums.some(isEven);
if(someEven){
print("Some numbers are even");
}
else{
print("No numbers are even");
}
nums=[1,3,5,7,9];
someEven=nums.some(isEven);
if(someEven){
print("Some numbers are even");
}
else{
print("No numbers are even");
}
//该程序的输出为:
Some numbers are even
No numbers are even

  • reduce
    该方法接受一个函数,返回一个值。该方法会从一个累加值开始,不断对累加值数组中的后续元素调用该函数,直到数组中的最后一个元素,最后返回得到的累加值。reduce()方法可以将数组中的元素连接成一个长的字符串。
function add(runningTotal,current){
return runningTotal+currentValue;
}
var nums=[1,2,3,4,5];
var sum=nums.reduce(add);
print(sum);
//显示结果为55

Javascript有reduceRight()方法,和reduce()不同的是它从右到左执行。


4.2 生成新数组的迭代器方法

map()

对数组中的每个元素使用某个函数,与forEach()类似,区别在于map()返回一个新的数组,该数组的元素是对原有元素应用某个函数得到的结果。

function first(word){
return word[0];
}
var words=["for","your","information"];
var acrOnym=words.map(first);
print(acronym.join(""));
//join()方法,可以传入一个空字符串作为参数

//显示结果为:"fyi"

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


五、二维数组和多维数组

5.1创建二维数组

需要先创建一个数组,再让数组的每个元素也是一个数组。

创建多维数组的源码:

Array.matrix=function(numrows,numcols,initial){
var arr=[];
for(var i=0;i var columns=[];
for(var j=0;i columns[j]=initial;
}
arr[i]=columns;
}
return arr;
}

5.2处理二维数组的元素

有两种基本的访问方式:按列访问和按行访问;row行,col列。

var grades=[[89,77,78],76,82,81]];
var total=0;
var average=0.0;
for(var row=0;row for(var col=0;col total+=grades[row][col];
}
average=total/grades[row].length;
print("student "+parseInt(row+1)+" average:"+average.toFixed(2));
total=0;
average=0.0;
}
程序输出为:
student 1 average:81.33
student 2 average:79.67

toFixed(n)保留到小数后n位,grades[row].length使用数组的length属性判断每行包含多少列



推荐阅读
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 从零学Java(10)之方法详解,喷打野你真的没我6!
    本文介绍了从零学Java系列中的第10篇文章,详解了Java中的方法。同时讨论了打野过程中喷打野的影响,以及金色打野刀对经济的增加和线上队友经济的影响。指出喷打野会导致线上经济的消减和影响队伍的团结。 ... [详细]
  • Html5-Canvas实现简易的抽奖转盘效果
    本文介绍了如何使用Html5和Canvas标签来实现简易的抽奖转盘效果,同时使用了jQueryRotate.js旋转插件。文章中给出了主要的html和css代码,并展示了实现的基本效果。 ... [详细]
  • 本文介绍了机器学习手册中关于日期和时区操作的重要性以及其在实际应用中的作用。文章以一个故事为背景,描述了学童们面对老先生的教导时的反应,以及上官如在这个过程中的表现。同时,文章也提到了顾慎为对上官如的恨意以及他们之间的矛盾源于早年的结局。最后,文章强调了日期和时区操作在机器学习中的重要性,并指出了其在实际应用中的作用和意义。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • Python爬虫中使用正则表达式的方法和注意事项
    本文介绍了在Python爬虫中使用正则表达式的方法和注意事项。首先解释了爬虫的四个主要步骤,并强调了正则表达式在数据处理中的重要性。然后详细介绍了正则表达式的概念和用法,包括检索、替换和过滤文本的功能。同时提到了re模块是Python内置的用于处理正则表达式的模块,并给出了使用正则表达式时需要注意的特殊字符转义和原始字符串的用法。通过本文的学习,读者可以掌握在Python爬虫中使用正则表达式的技巧和方法。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
  • 用Vue实现的Demo商品管理效果图及实现代码
    本文介绍了一个使用Vue实现的Demo商品管理的效果图及实现代码。 ... [详细]
  • 获取时间的函数js代码,js获取时区代码
    本文目录一览:1、js获取服务器时间(动态)2 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
author-avatar
V陈冬梅_717
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有