JaveScript数组(JS知识点归纳五)
1.概念
a)作用--用于保存多个数据,便于对数据的使用
b)数组元素--数组中的数据
c)索引--数组中的元素按照下标(数值)的方式排列(从0 开始),依次递增(也有可能是字符串的类型--不用)
d)长度--数组中的元素个数--length
2.创建方式
a)构造函数创建方式 var arr = new Array (1,2,3);
b)字面量方式创建 var arr = [1,2,3];
c)获取指定元素 arr[index]
d)设置元素 arr[index]=要设置的值
3.length
a)与index的关系-index= length-1
b)length > 元素个数 没有意义 --会产生误导
c)length < 元素个数 后面多出的元素会被删除
d)清空数组 arr.length-0;--修改数组的元素值
arr=[];--更换为新的数组
4.数组遍历
a)使用for循环
b)反向遍历 for(var= arr.length-1; i >=0;i-- ){ 从后往前取值 };
练习:
1)将0-99之间的数放入到数组中
var arr=[];
for (var i = 0 ; i <100,i++){
arr[i]=i;
}
console.log(arr);
2)将1-100所有数放入到数组中
var arr= [ ];
for (var i = 0 ; i<=100;i++){
arr[i-1]=i;//索引默认从0 开始,-1就是第一个索引是1
arr[arr.length]=i;
}
console.log(arr)
3)将1-100之间的所有偶数放入到数组中
var arr = [ ];
for (var i = 1 ; i <=100 ; i++){
if (i%2===0){
arr[arr.length]=i;
}
}
console.log(arr);
4)求一组数中的最大值和最小值,以及所在位置(索引值)
var arr= [ 1,5,4,33,6,67,999];
var max=arr[0];//声明变量
var min =arr[0];
var maxIndex=0;//声明索引值
var minIndex=0;
for (var i = 0 ; i <arr.length;i++){
if (max<arr[i]){
max = arr[i];
maxIndex=i;//索引值=i
}
if (min>arr[i]){
min=arr[i];
minIndex=i;
}
}
console.log(max, maxIndex);
console.log(min, minIndex);
5)将字符串数组用|或其他符号分割
var arr = ["abc","asd","asdqwe"];
var str =[];
var fuhao="-";
for (var i = 0 ; i < arr.length;i++){
str=str+fuhao+arr[i];
}
console.log(str);
5.翻转数组
a)反向遍历
var arr=["a","b","c"];
var resultArr=[];
for (var i = arr.length-1;i>=0;i++){
resultArr[resultARR.length]=arr[i];
}
console.log(arr);
b)直接在原有数组的基础上进行翻转
var arr=["a","b","c"];
var temp;
for (var i = 0 ; i<parseInt(arr.length/2-1);i++){
temp=arr[i];
arr[i]=arr[arr.length-1-i];
arr[arr.length-1-i]=temp;
}
console.log(arr);
6.冒泡排序
a)基本的冒泡排序
var arr = [1,2,6,4,9,2];
var j,temp;
for(var i = 0 ; i < arr.length-1;i++){
for (j = 0 ; j <arr.length -i -1;j++){
if (arr[j]>arr[j+1]){
temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
console.log(arr);
b)冒泡排序的优化---假设成立
1)找到不确定的点,设置假设条件
2)找到可以让假设失败的条件,设置flag=false
3)验证flag的结果
var arr = [1,2,6,4,9,2];
var j,temp,flag;
for(var i = 0 ; i < arr.length-1;i++){
//假设是真
flag=true;
for (j = 0 ; j <arr.length -i -1;j++){
if (arr[j]>arr[j+1]){
temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
//假设不成立
flag =false;
}
}
//是真--成立--跳出
if (true){
break;
}
}
console.log(arr);
7.数组去重
a)假设成立法
var arr = [1,2,6,4,9,2];
var j,temp,flag;
for(var i = 0 ; i < arr.length-1;i++){
//假设是真
flag=true;
for (j = 0 ; j <arr.length -i -1;j++){
if (arr[j]>arr[j+1]){
temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
//假设不成立
flag =false;
}
}
//是真--成立--跳出
if (true){
break;
}
}
console.log(arr);
b)计数法
var arr= [1,1,1,12,2,2,234,346,5,6,78,0];
var resultArr=[];
resultArr[0]=arr[0];
var j ,count;//设置计数
for(var i = 0 ; i <arr.length;i++){
count=0;//针对arr[i]设置新的计数
for(j = 0 ; j <resultArr.length;j++){
if(resultArr[j]===arr[i]){//相等不执行
count++;
break;
}
}
if(count===0){检测count的值
resultArr[resultArr.length]=arr[i];
}
}
console.log(resultArr);
c)循环特性--利用循环特性
//数组去重:有一个数据重复的数组,我们需要通过处理,得到一个不重复的数组
var arr = [1, 1, 2, 3, 3, 2, 4, 5, 5, 4, 3, 2, 1];
//1 创建一个结果数组
//结果数组一定不能重复
var resultArr = [];
resultArr[0] = arr[0];
var j;
//利用循环特性的解题方式实际上通过判断循环变量和数组长度之间的关系,去检测循环的结束方式
for (var i = 1; i < arr.length; i++) {
for (j = 0; j < resultArr.length; j++) {
if (arr[i] === resultArr[j]) {
//如果找到相等的项,执行break;
break;
}
}
//在内循环结束后,检测j和resultArr.length的关系
if (j === resultArr.length) {
//说明循环正常结束,说明没有执行过跳出,意味着没有找到相等的元素,进行放入操作
resultArr[resultArr.length] = arr[i];
}
}
console.log(resultArr);
8.数组的类型检测--复杂数据类型
a)Array.isArray([1,2,3]); 返回值--布尔 数组==true IE9以下不支持
b)[1, 2, 3] instanceof Array
c)Object.prototype.toString.call([1,2,3]);
9.简单数据类型与复杂数据类型的区别
a)保存数据个数上不同
简单--一个值
复杂--多个值
b)在内存中的保存方式
简单--具体值--值类型--保存于栈中
复杂--具体值的指向(箭头)--引用类型--保存于堆总(初学者)
c)进行复制操作是,结果不同
简单--复制前后无关联 复制粘贴
复制--复杂前后的结果是一样的 设立快捷方式
10.二维数组--数组中还有数组
var arr = [1,2,3,[4,5,6]];
遍历:
var j ,temp;
for (var i = 0 ; i <arr.length ; i ++){
temp = arr[i];//进行保存,方便下次使用
if (temp instanceof Array){//检测是否是数组
for ( j = 0 ; j <temp.length ; j ++){
console.log(temp[j]);//是数组,打印出来
}
}else{
console.log(temp);不是数组,直接打印
}
}
对于,数组的大概也就是这么多.
从写博的这段时间,越来越纠结,每一句话都要去想好久,自己写的对不对,大家看的是否可以理解,我归纳的是否有遗漏等..
但是,这段时间却是成长了很多.我会慢慢地去完善,改善自己的.
PS:2018-01-20,这天,我在北京798熊猫慢递,写了一封给某某人的信,我希望这封信永远不会被寄出,这个人永远不会看到信..安可
JaveScript数组(JS知识点归纳五)的更多相关文章
- JaveScript运算符(JS知识点归纳三)
JaveScript中有许多的运算符,在这里就只说明一些需要注意的. 01 一元运算符 一元:指的是参与运算的操作数只有一个 最经常使用的是++ -- 计算规则: ++/-- 前置于操作数的时候 ...
- JaveScript函数(JS知识点归纳六)
1.函数的基本使用 a)作用:代码的复用,灵活性比较强 b)声明方式:function 名 (形参){函数体} c)调用: 名(实参); d)封装函数--书写一个函数的结构,而且放入一些功能,在需要使 ...
- JaveScript对象(JS知识点归纳七)
1.JS中的对象表示的是一个具体的事物. a)静态的特征=>对象的属性 b)动态的行为=>对象的方法=>保存的值==>函数 2.对象的创建方式 a)构造函数的创建方式 ``` ...
- JaveScript简单数据类型(JS知识点归纳二)
JS中的简单数据类型有五种 : --> string --> number -->boolean --> null -->undefined 数据类型的检测 :typeo ...
- JaveScript内置对象(JS知识点归纳八)
1)JS自身提供的方式 用于对数据进行简便的操作,根据方法可以操作的数据类型不同,形成了不同的对象--内置对象 2)数组 a)基本操作方法--对数组进行修改 从数组最后进行操作 1)数组.push ...
- JaveScript变量的简介及其变量的简单使用(JS知识点归纳一)
变量简介 "变量是一个容器" 为什么要有变量? 程序的执行过程中,会使用到许多的数据(用户输入的内容,动态效果的运动数据等),当这些数据需要重复在多个地方使用的时候,就需要一个容器 ...
- JaveScript流程控制(JS知识点归纳四)
01 流程控制 顺序结构: 程序的默认执行方式 条件判断语句:也称之为分支结构,选择结构:如果程序要执行的代码出现了多种情况需要使用 循环结构:当代码需要多次重复执行多次时,使用 02 条件判断语句 ...
- js 数组的常用方法归纳
数组的常用方法归纳 slice(start,end) 传参:start代表从哪里开始截取,end代表截取结束的地方 var a = [1,2,3]a.slice(1);//[2,3] pop() 可以 ...
- JS知识点整理(二)
前言 这是对平时的一些读书笔记和理解进行整理的第二部分,第一部分请前往:JS知识点整理(一).本文包含一些易混淆.遗漏的知识点,也会配上一些例子,也许不是很完整,也许还会有点杂,但也许会有你需要的,后 ...
随机推荐
- django2.0+linux服务器 ,如何让自己电脑访问
这几天一直在搞这个服务器端口开放问题,来让自己电脑可以访问服务器下的django网页,今天终于弄好了~~~~~离成功又进了一步~~~~~ 1.首先,我们来开放一个linux服务器的端口(我开放了828 ...
- 【ANT】taskdef class org.programmerplanet.ant.taskdefs.jmeter.JMeterTask cannot be found using the classloader AntClassLoader[]解决办法
把文件apache-jmeter-3.1\extras\ant-jmeter-1.1.1.jar复制到apache-ant-1.10.1\lib目录下即可.
- vue使用国际化
转载请注明作者与出处 一:安装vue-i18n npm install vue-i18n --save 二:定义不同语言的json语言包 一般把它放到npm工程中的src目录下,因为这个目录是要进行编 ...
- df 命令详解
一.df 作用: 显示磁盘分区上的可使用的磁盘空间, 默认显示单位为kb . 可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间的等信息. 选项: -a :包含全部的文件系统 -h :以 ...
- 初识JavaScript(一)
初识JavaScript(一) 最近由于工作的需要的原因,我从一个写后台的现在让我转到写前端,再加上我的js部分特别的差,所以我现在开始学习js部分的知识. 我的第一篇博文就这样开始写了.俗话说,千里 ...
- 关于模拟登陆微博(PC)
微博模拟登陆 1.基类对象的方法建立一个类__init__初始化方法,接收username和password. class launcher(): def __init__(self, usernam ...
- 关于HTTP协议头域详解
HTTP1.1 请求头:消息头 Accept:text/html,image/* 告诉服务器,客户机支持的数据类型 Accept-Charset:ISO-8859-1 告诉服务器,客户机采用的编 ...
- HBase跨地区机房的压测小程序——从开发到打包部署(图文版)
今天做了一个跨地区机房的压测小程序,主要的思路就是基于事先准备好的rowkey文件,利用多线程模拟并发的rowkey查询,可以实现并发数的自由控制.主要是整个流程下来,遇到了点打包的坑,所以特意记录下 ...
- VS2017 调试期间无法获取到变量值查看
只要把勾去掉就能查看变量的值了
- Linux入门篇(一)——文件
这一系列的Linux入门都是本人在<鸟哥的Linux私房菜>的基础上总结的基本内容,主要是记录下自己的学习过程,也方便大家简要的了解 Linux Distribution是Ubuntu而不 ...