JS中的数组简介

JS中一共有七种数据类型:number,string,null,undefined,Boolean,symbol以及Object,其中数组属于object,js数组不是典型的数组,因为典型的数组中元素的数据类型都是相同的,并且使用连续的内存储存,是通过数字下标获取元素的,但是JS的数组不是这样的,JS数组中元素的类型可以不一样,内存也不一定连续(对象是随机储存的),不能通过数子下标,而是通过字符串下标,平时使用的数组名[数子下标]的这种情况,JS引擎会把数子下标加上引号替换成字符串下标 数组名['数子下标'] ,意思就是说数组中的下标是字符串

 //当使用数子下标时
array[0] //js引擎会把数子下标换成字符串下标
array['0']

这就意味着数组可以是任何key,例如看下图

先声明数组arr1=[1,2,3,4,5,6],然后添加索引为xxx,值为“xxx”的元素,输出之后显示有xxx:‘xxx’这个元素,但是注意,这个时候数组的length的值本应为7,但却是6,所以这样写法不推荐。

创建一个数组

可以通过let arr = []的形式来创建一个数组名为arr的空数组,但是平时我们创建数组为let arr = new Array()的方式,其中括号内可以传参数,所传递的参数个数不同,意思也不同

 let arr = new Array();//当没有传递参数的时候就是单纯的声明一个空的数组,没有大小
let arr = new Array(5);//当传递一个参数的时候就是创建一个大小为5的数组名为arr的数组
let arr = new Array(1,2,3)//当传递多个参数的时候就是创建一个内容为1,2,3的大小为3的数组

最后我们说一下伪数组,区分伪数组的最简单的办法就是看它的原型链中是否有数组的原型,比如:`let listArr = document.querySelectorAll('div'),这个返回的是一个对象的数组,但是它的原型中没有数组的原型,所以是伪数组。

数组的增删改查

删:

我们先说说删除操作,因为数组是对象,所以也可以用delete来删除数组的元素,但是JS中有点bug,请看下列代码:

我们声明了一个对象之后用delete来删除数组中的第二个元素,执行操作之后第二个元素被替换为empty,并且数组的长度还是6,没有发生改变,所以不推荐使用这种方式来删除数组中的元素,还有一种不推荐的删除数组元素的方式就是改变数组的length来删除元素,这里不做解释,请看下面的代码:

改变数组的长度之后数组果然变短了,的确删除了元素,但是这种方式不推荐。下面来说说推荐的方式,直接上代码:

arr.shift() //删除头部的元素,数组被修改,并且返回被删除的元素arr.pop() //删除尾部的元素,数组被修改,并且返回被删除的元素//使用splice来删除元素,传递的参数不同所起到的作用也不同
arr.splice(index,number) //删除数组的下标为index在内的之后的number个的元素
arr.splice(index,number,'string') //删除数组的下标为index在内的之后的number个的元素,//并且在删除的部分添加字符串'string',这里看可以是多个字符串

个人感觉只要记住了splice的用法之后就可以了,因为splice的功能包含shift和pop,并且还可以添加元素,所以只用记住一个就可以了,其他的可以作为 了解

查:

有光查看键名的也有查看键值的,还有查看所有的键值对的

Object.keys(arr);  //查看所有的键名的object.values(arr); //查看所有键值的arr;     //直接输出数组的

也可以使用for循环或者foreach来遍历数组的

//for循环
for(let i = 0; i < arr.length; i++){console.log(i + ":" + arr[i]);
}for(let key in arr1){console.log( (`${key}: ${arr1[key]}` ))
}//foreach循环
arr1.forEach(function(element){console.log(element)
})

详细的forEach使用可以参考MDN文档:

Array.prototype.forEach()​developer.mozilla.org

也可以查看单个属性就是刚开始提到的那种办法arr[1]这样的,但是使用这种方法的时候要注意数组越界

还有一个函数可以查看某个元素是否在数组里面

 arr.indexOf(items);//如果存在返回下标,如果不存在饭后-1

增:

可以使用push()函数来在尾部添加元素:

arr.push(items)//在尾部添加元素,会修改原数组,并且括号里面的元素可以是多个

arr.unshift(items) //在头部添加元素,会修改原数组,并且括号里面的元素可以是多个

同样的也可以使用splice()来增加元素,用法上面已经介绍了,在添加的时候要把第二个参数修改为0:arr.splice(index,0,'hhh')在下标为index的位置前面添加元素,键值为'hhh'。

下面介绍几个函数:

1.arr.reverce() 反转函数,会修改原数组

2.arr.sort(function(a,b){return a-b}排序函数,里面的参数a-b的值大于零时是从小到大排,小于零时为从大到小排。详情可以参考MDN文档:

Array.prototype.sort()​developer.mozilla.org

3. arr.map(function(){})创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值。下面的函数把数组中的每个元素都乘于2

var numbers = [1, 4, 9];
var doubles = numbers.map(function(num) {return num * 2;
});// doubles数组的值为: [2, 8, 18]
// numbers数组未被修改: [1, 4, 9]

4.array.filter(function(){})方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。 下例使用 filter 创建了一个新数组,该数组的元素由原数组中值大于 10 的元素组成。

function isBigEnough(element) {return element >= 10;
}
var filtered = [12, 5, 8, 130, 44].filter(isBigEnough);
// filtered is [12, 130, 44]

5.`array.reduce(function(){})方法对数组中的每个元素执行一个由您提供的reducer函数(升序执行),将其结果汇总为单个返回值。这个函数比较复杂,建议参考MDN文档:

Array.prototype.reduce()​developer.mozilla.org

下面我用我的理解来解释一下

arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])

解释如下:

arr.reduce(function(累计器,正在处理的元素,正在处理的元素的索引(可选),调用reduce的数组(可选)),初始值])

举一个简单的例子:

var sum = [0, 1, 2, 3].reduce(function (accumulator, currentValue) {return accumulator + currentValue;
}, 0);
// 和为 6

activex传字符串数组_JS中的数组以及数组的#x27;增#x27;,#x27;删#x27;,#x27;改#x27;,#x27;查#x27;相关推荐

  1. 求出千位数上的数加百位数上的数等于十位数上的数加个位数上的数的个数cnt,再把所有满足条件的四位数依次存入数组b中,然后对数组b中的四位数按从大到小的顺序进行排序。

    已知数据文件IN13.DAT中存有300个四位数,并已调用读函数readDat()把这些数存入数组a中,请编制一个函数jsValue(),其功能是:求出千位数上的数加百位数上的数等于十位数上的数加个位 ...

  2. 求出所有这些四位数是素数的个数cnt,再把所有满足此条件的四位数依次存入数组b中,然后对数组b中的四位数按从小到大的顺序进行排序

    已知数据文件IN14.DAT中存有300个四位数,并已调用读函数readDat()把这些数存入数组a中.请编制一个函数jsValue(),其功能是:求出所有这些四位数是素数的个数cnt,再把所有满足此 ...

  3. 数组x中数据复制到数组y中,重复的数据只存储一次,最后输出y;计算x中数据的平均值ave及大于平均值的元素个数n。c++实现

    题目描述 编程序,实现如下功能: (1)定义两个一维数组x,y,不超过50个元素. (2)从键盘输入k个整数到数组x中. (3)计算x中数据的平均值ave及大于平均值的元素个数n并输出. (4)将数组 ...

  4. js中遍历数组加到新数组_JS中的真伪数组

    前端inn 公众号ID:前端inn 关注 作者:冥冥之中立刻有 1. 快速理解伪数组 相关概念 伪数组也称为类数组 伪数组是一个对象 伪数组的特点 [1]具有length属性 [2]按索引方式存储数据 ...

  5. java不等长二维数组_Java中关于二维数组的理解与使用

    今天练习的时候遇到一个题目,题目需求是这样的: 需求说明: 根据3个班各5名学生某门课程的成绩,正确使用二维数组计算如图所示3个班各自的总成绩 分析: 要实现这个功能需要存储两个信息: 一个是班级信息 ...

  6. 数组方法中会更改原数组,不会更改原数组(详细)

    1.不会改变原来数组的有: concat() 连接两个或更多的数组,并返回结果.  如果arr.concat()里面不放数组参数,则会浅拷贝arr 如果参数不是数组,它不会递归到嵌套数组参数中 数据类 ...

  7. python创建一个n*m的二维数组_Python中创建二维数组

    Python中创建二维数组 二维数组 二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式][常量表达式].二维数组又称为矩阵,行列数相等的矩 ...

  8. python构建二维数组_Python中创建二维数组

    二维数组 二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式][常量表达式].二维数组又称为矩阵,行列数相等的矩阵称为方阵.对称矩阵a[i] ...

  9. java 申请不定长度数组_java中申请不定长度数组ArrayList的方法

    如下所示: import java.util.ArrayList; //java中申请不定长度数组 public class Test01 { public static void main(Stri ...

最新文章

  1. 制作基于http的yum源2
  2. Spring Boot 定时任务
  3. labelme 语义分割数据集_labelme安装以及使用教程——自制语义分割数据集(保姆级示范)...
  4. C#——image与byte数组的转换
  5. c++ vector排序_个性化推荐系统源代码之基于LR模型的推荐系统离线排序方案
  6. 百度入股汽车照明模组晶合光电
  7. 【报告分享】2021中国移动互联网秋季大报告.pdf(附下载链接)
  8. ipv6单播地址包括哪两种类型_探秘联接|技术小课堂之BRAS设备IPv6地址分配方式...
  9. linux 下修复坏u盘启动不了怎么办,U盘打不开并不是坏了, 用这两个命令, 轻松修复里面的文件...
  10. 敏捷开发之道(六)计划(续)
  11. Video.js 使用教程 - 手把手教你基于 Vue 搭建 HTML 5 视频播放器
  12. 剑英陪你玩转图形学(一)打通任督二脉
  13. linux 内存管理(8) —内存描述符(mm_struct)
  14. 如何使用node.js后端框架中的egg.js框架
  15. 厨师 做菜 java_厨师做菜心得
  16. 教你给大量视频快速调整色调的方法
  17. 《图解密码技术》笔记2:历史上的密码-写一篇别人看不懂的文章
  18. 送给计算机老师的话,毕业送给老师的话短句
  19. 【域控管理】域控的必要性
  20. ctfshow---命令执行

热门文章

  1. 百词斩 面试题 面试经验分析 成都超有爱科技有限公司 软件测试工程师 测试面试题分享 实战之战损版
  2. 零窗口探测怎么抓包_窗口信息探测(Spy4Win) v0.20b 中文版
  3. 仿懂车帝app车型对比效果
  4. iphone下来电实现铃声静音
  5. Sandboxie-沙箱软件-Plus版本(Qt)-主框架程序-SandMan.exe-创建语言文件-tr-Qt-语言国际化
  6. 计算机怎么加两个硬盘,两个硬盘怎么设置主从 两个硬盘设置主从方法【图文】...
  7. Python读取文件中文乱码问题
  8. 数据库开发案例—图书管理系统设计
  9. iPhone Apple App Store购买应用后,不想买了,退款的方法
  10. Python 去除空格的方法