做网站 怎么赚钱吗,WordPress使用sentcloud,做网站的难题,网站开发源代码 百度文库在开始正式的内容之前#xff0c;不得不说说js中的数据类型和数据结构#xff0c;以及一些比较容易让人混淆的概念。那么为什么要从数组说起#xff1f;数组在js中是最常见的内存数据结构#xff0c;数组数据结构在js中拥有很多的方法#xff0c;很多初学者记不清数组的大… 在开始正式的内容之前不得不说说js中的数据类型和数据结构以及一些比较容易让人混淆的概念。那么为什么要从数组说起数组在js中是最常见的内存数据结构数组数据结构在js中拥有很多的方法很多初学者记不清数组的大多数用法只知道pushpopshift等最基本的几个。所以本系列数组篇会尽可能的让大家对数组有一个透彻的了解。也方便后面其他数据结构的学习和使用。 可能很多web前端开发者都会有一个疑问那就是数组和对象究竟是数据类型还是数据结构那么我们就带着这样的疑问开始下面的学习希望看完这篇文章之后你模糊的概念会变得清晰一些。 首先在js中数据类型分为两种基本类型原始类型和复杂类型其中基本类型是String字符串Number数值Boolean布尔值还有undefined和null。复杂类型是Objecct对象。 说到这里大家可能会有些疑问只有这六种类型那数组Array正则RegExp日期Date算是什么其实他们都是Object对象的一个分支换句话说它们都属于Object类型这也正是js与众不同的地方——万物皆对象。而后面要聊的包括队列栈链表集合树图等数据结构在js中的展现方式也都是通过对象和原型来实现的。本文无意去详细的描述数据类型和数据结构的种类以及在js中的体现形式。所以点到为止。 故事已经开始请大家系好安全带跟着我驰骋在在这篇广阔的土地上——数组。 先解释一下什么是数组吧所谓数组是有序的元素序列。 若将有限个类型相同的变量的集合命名那么这个“名”称为数组名。组成数组的各个变量称为数组的分量也称为数组的元素有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中为了处理方便 把具有相同类型的若干元素按无序的形式组织起来的一种形式。这些无序排列的同类数据元素的集合称为数组。简单来说数组就是用于储存多个相同类型数据的集合。当然js中的数组也可以存储不同类型数据但是不建议这样做 一、数组的创建和初始化 相信很多小伙伴都知道创建一个数组十分容易 var arr []; 这样我们就创建了一个数组我们还可以用new关键字来创建并初始化一个数组 //创建一个空数组
var newArr new Array();
//创建一个指定长度的数组
var newLenArr new Array(4);
//创建一个具有指定参数的数组
var numArr new Array(1,2,3,4); 当然通过new关键字创建并初始化数组的方式并不推荐这里只是给大家介绍一下。其实我们通过上面第一种方式来创建数组的本质就是通过new来实例化一个Array对象。OK这里不多说它的实现原理还是回到数组本身来吧。 那么我们如何读取数组中的数据呢很简单我就一句话带过了也就是通过中括号[ ]arr[2]来传递数值的位置获取到对应位置的值也可以通过这种方式来重新赋值。 二、数组的增删 接下来说说如何使用js数组自带的方法来实现数组头尾的增删push(数组尾部插入元素)unshift(数组头部插入元素)pop(数组尾部删除元素)和shift(数组头部删除元素) 1、push方法 如果我不想使用push方法有没有什么方式可以在数组的尾部插入一个元素呢其实很简单我们只需要把值赋给数组中最后一个空位上的元素就可以了。 var nums [0,1,2,3,4];
nums[nums.length] 5; 我们通过length属性获取该数组的长度是5但是我们数组对应的下标是从0开始的通过这样的方式也就给数组的尾部插入了一个新的元素。当然其实我们可以更方便的使用push来给数组的尾部插入一个元素 var nums [0,1,2,3,4];
nums.push(5); 也可以得到同样的结果。当然push也可以传入多个参数依次的从尾部插入数组 var nums [0,1,2,3,4];
nums.push(5,6,6);
//[0,1,2,3,4,5,6,6] 2、unshift方法 那么同样的如何在不使用原生方法的前提下给数组的头部添加一个元素呢 var nums [0,1,2,3,4,5,6];
for(var i nums.length;i 0;i--){nums[i] nums[i - 1];
}
//[undefined, 0, 1, 2, 3, 4, 5, 6]
nums[0] -1;
//[-1, 0, 1, 2, 3, 4, 5, 6] 实际上我们通过循环遍历把nums数组中的每一位所对应的下标增加一个也就是向后移动一位那么这就导致了头部的位置空出它的位置是存在的但是此时我们并没有给空出的位置所对应的下标赋值所以它的长度增加了值确实undefined赋值之后才会得到我们想要的结果。 下面我们还是用unshift方法来给数组的头部插入新值 var nums [0,1,2,3,4,5];
nums.unshift(-1);
//[-1, 0, 1, 2, 3, 4, 5]
nums.unshift(-2,-3);
//[-2, -3, -1, 0, 1, 2, 3, 4, 5] 那么要注意一点在使用unshift传入多个参数的时候他会把第一个参数放在数组的头部以此类推也就是说unshift方法会把所有的参数依照顺序插入数组并不是我们想当然的那样从第一个参数依次添加进数组。 3、pop方法 如果我想要删除数组尾部的元素我们可以使用pop方法其实我们还是可以用js来模拟一下pop var nums [0,1,2,3,4,5];
nums.length nums.length - 1;
//[0, 1, 2, 3, 4] 我们可以通过手动让数组的长度减少一位就可以实现删除数组尾部的元素当然也可以减少两位三位等。 实际上在日常开发中通常都会使用pop方法来删除数组尾部的元素pop()方法没有参数只是删除数组尾部的元素。 var nums [0,1,2,3,4,5];
nums.pop()
// [0, 1, 2, 3, 4] 4、shift方法 那么接下来我们看看如何从数组的首位删除元素 var nums [0,1,2,3,4,5];
for(var i 0; i nums.length; i) {nums[i] nums[i 1]
}
// [1, 2, 3, 4, 5, undefined] 可以看到我们最后一位是undefined也就是说在最后一次的循环里i 1引用了一个数组里还未初始化的位置开辟了空间但是未赋值所以这样的方式只是依次覆盖了上一位的值并没有真正的删除元素。如果想要删除首位的元素这就需要用到shift方法了。 var nums [0,1,2,3,4,5];
nums.shift();
// [1, 2, 3, 4, 5] 5、splice方法 最后我们看看如何使用splice()方法在数组的任意位置添加和删除元素 var nums [0,1,2,3,4,5,6,7];
nums.splice(2);
//[0, 1]
//如果只加一个参数说明删除从下标2开始的所有的后面的元素 var nums [0,1,2,3,4,5,6,7];
nums.splice(2,1);
//[0, 1, 3, 4, 5, 6, 7]
//如果加入两个参数则为删除从下标2开始的后面的几个元素。 var nums [0,1,2,3,4,5,6,7];
nums.splice(2,1,a,b,c);
//[0, 1, a, b, c, 3, 4, 5, 6, 7]
//三个或多个参数意味着删除从下标2第一个参数开始的后面的1个第二个参数元素并在下标2的后面加入从第三个参数开始的后面的所有参数把第二个参数设置为0就可以不删除元素从而实现从任意位置添加元素 再多说一点我们还可以使用delete操作符来删除数组中的元素但是实际上delete只是删除了对应下标上所存储的值并没有同时把存储值得空间也删除掉会导致对应位置上的值为undefined var nums [0,1,2,3,4,5,6,7];
delete nums[2];
//[0, 1, undefined, 3, 4, 5, 6, 7] splice()方法是修改了原数组的。 6、slice() slice()方法会返回参数选定的范围的数组。该方法有两个参数start必选和end可选。这两个值可以为负数如果为负数则默认从尾部的第一个参数算起也就是说-1就是数组的最后一个元素-2就是数组的倒数第二个元素以此类推。如果不传end则默认从start开始直到数组最后一个元素都会被截取。 var nums [0,1,2,3,4,5,6,6,7,a,9,10,{name:zaking},[b,c]];
var a nums.slice(1,5);
console.log(a);//[1, 2, 3, 4]
var b nums.slice(-1,5);
console.log(b);//[]
var c nums.slice(-1,-5);
console.log(c);//[]
var d nums.slice(-5,-1);
console.log(d);// [a, 9, 10, {…}]
var f nums.slice(5,1);
console.log(f);//[]
var x nums.slice(5);
console.log(x);// [5, 6, 6, 7, a, 9, 10, {…}, Array(2)]
var y nums.slice(-5);
console.log(y)//[a, 9, 10, {…}, Array(2)] 希望大家仔细看一下这个例子当然我还是一句话说明一下吧。 其实主旨就是你所传的参数无论正负参数所限定的范围必须是包含数组元素的。转载于:https://www.cnblogs.com/wang-z-z/p/8797385.html