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知识点整理(一).本文包含一些易混淆.遗漏的知识点,也会配上一些例子,也许不是很完整,也许还会有点杂,但也许会有你需要的,后 ...
随机推荐
- OpenCASCADE 公众号
OpenCASCADE 公众号 eryar@163.com 今天也注册了一个微信公众号,以后会在微信公众号中发表OpenCASCADE学习文章,Blog会与微信公众号同步.下面是微信公众号二维码,欢迎 ...
- 《软件测试的艺术(原书第2版)》【PDF】下载
<软件测试的艺术(原书第2版)>[PDF]下载链接: https://u253469.ctfile.com/fs/253469-231196343 内容简介 本书以一次自评价测试开篇,从软 ...
- 获取手机安装的所有包名adb shell pm list packages
获取所有已安装包的包名:adb shell pm list packages 查找:adb shell pm list packages|findstr suning
- case
case $变量 in "值1") 执行语句; ;; "值2") 执行语句; ;; ... *) 默认执行语句 ;; esac #!/bin/bash read ...
- 下篇: php 微商城 基于Thinkphp3.2框架开发
(12)微信商城 ① 前台模板引入 a.引入微信商城模板的css+js+Images+img+bootstrap b.引入微商城的首页index.html及详情页detail.html页面模板 注意: ...
- iOS知识点集合--更改(2)
3.nsmutablearray *a 如果直接赋值 a = @[@"d",@""]; 这个时候a 是不可变的 字典也是如此 2.如果接口调用错误的话 打印re ...
- VMware的一些总结
一.虚拟主机联网的三种方式: 1.仅主机(Host Only),虚拟主机只能与宿主机联网通信,无法访问外网和宿主机所在局域网的其它主机. 2.桥接(Bridge),在桥接模式下,虚拟主机就像是宿主机所 ...
- 转:IT巨头纷纷“卡位” 智能语音成人机交互入口必争之地
http://www.cs.com.cn/xwzx/hwxx/201707/t20170712_5368595.html 随着物联网的迅速发展,作为重要接口的智能语音技术已成为国内外IT巨头的必争之地 ...
- Shader 1:能接受阴影的透明shader
第一次接触Shader,项目需要,直接说需求吧,需要一个透明并且能接受阴影的shader.unity系统自带的shader已经满足不了了.上一段代码吧 Shader "GreenArch/T ...
- [编织消息框架][netty源码分析]14 PoolChunk 的 PoolSubpage
final class PoolSubpage<T> implements PoolSubpageMetric { //该page分配的chunk final PoolChunk<T ...