JavaScript 数组详解

合集下载

详解JavaScript数组过滤相同元素的5种方法

详解JavaScript数组过滤相同元素的5种方法

详解JavaScript数组过滤相同元素的5种⽅法⽅法⼀:⽐较内层循环变量的值.var arr = [1, 2, 3, 1, 3, 4, 5, 5];var resultArr = [];for (i = 0; i < arr.length; i++) {for (j = 0; j < resultArr.length; j++) {if (resultArr[j] == arr[i]) {break;}}if (j == resultArr.length) {resultArr[resultArr.length] = arr[i];}}console.log(resultArr); //1,2,3,4,5⽅法⼆:计数法.var arr = [1, 2, 3, 1, 3, 4, 5, 5];var count;var resultArr = [];for (i = 0; i < arr.length; i++) {count = 0;for (j = 0; j < resultArr.length; j++) {if (resultArr[j] == arr[i]) {count++;break;}}if (count == 0) {resultArr[resultArr.length] = arr[i];}}console.log(resultArr); //1,2,3,4,5⽅法三:flag标志法(也叫假设成⽴法)var arr = [1, 2, 3, 1, 2, 3, 4, 5, 5];var resultArr = []; //[1,2,3]var flag;for (var i = 0; i < arr.length; i++) {flag = true;for (j = 0; j < resultArr.length; j++) {if (resultArr[j] == arr[i]) {flag = false;break;}}if (flag) {resultArr[resultArr.length] = arr[i];}}console.log(resultArr);//1,2,3,4,5⽅法四:使⽤sort()⽅法排序后⽐较var arr = [1, 2, 3, 1, 2, 3, 4, 5, 5];var resultArr = [];arr.sort(function (a, b) {return a - b;});//这个时候arr变成了[1, 1, 2, 2, 3, 3, 4, 5, 5]for (i = 0; i < arr.length; i++) {if (arr[i] != arr[i + 1]) {resultArr[resultArr.length] = arr[i];}}console.log(resultArr);⽅法五:使⽤filter()⽅法筛选掉重复的数组var arr = [1, 2, 3, 1, 2, 3, 4, 5, 5];var resultArr;resultArr = arr.filter(function (item, index, self) {return self.indexOf(item) == index;});console.log(resultArr);以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

javascript定义数组的方法

javascript定义数组的方法

javascript定义数组的方法以Javascript定义数组的方法Javascript作为一种脚本语言,其灵活性和易用性在Web开发中得到了广泛的应用。

而数组作为Javascript中的一种重要数据类型,其在数据存储和处理中起到了至关重要的作用。

本文将介绍Javascript中定义数组的方法,希望能为初学者提供帮助。

一、使用数组字面量定义数组数组字面量是一种最简单和常见的定义数组的方法。

使用该方法可以在一行代码中定义一个数组,并为其赋初始值。

其语法格式为:```javascriptvar arr = [value1, value2, ..., valueN];```其中,value1, value2, ..., valueN是数组元素的初始值,可以是任意的Javascript表达式。

例如,定义一个包含5个元素的数组,并为其赋初值:```javascriptvar arr = [1, 2, 3, 4, 5];```二、使用Array构造函数定义数组除了使用数组字面量,还可以使用Array构造函数定义数组。

该方法需要使用new操作符来创建一个数组对象,并可以指定数组的长度和初始值。

其语法格式为:```javascriptvar arr = new Array();var arr = new Array(length);var arr = new Array(element0, element1, ..., elementN);```其中,length是数组的长度,element0, element1, ..., elementN 是数组元素的初始值。

需要注意的是,如果只传入一个参数,且该参数为数字类型,则会被视为数组的长度而不是元素的值。

例如,定义一个包含5个元素的数组,并为其赋初值:```javascriptvar arr = new Array(1, 2, 3, 4, 5);```三、使用Array.from方法定义数组在ES6之后,Javascript新增了一个Array.from方法,该方法可以将一个类数组对象或可迭代对象转换为一个真正的数组。

详解JavaScript中数组的reduce方法

详解JavaScript中数组的reduce方法

详解JavaScript中数组的reduce⽅法介绍我们先来看看这个⽅法的官⽅概述:reduce() ⽅法接收⼀个函数作为累加器(accumulator),数组中的每个值(从左到右)开始缩减,最终为⼀个值。

你⼀定也和我⼀样看的有点迷糊,其实reduce接收的就是⼀个回调函数,去调⽤数组⾥的每⼀项,直到数组结束。

我们来举个例⼦⼤家就很明⽩了。

假设我有⼀串数组,数组⾥放的全是数字,我要算出这些数字的总和是多少。

正常情况下我们会循环,然后⼀个个加,有了reduce就不⽤那么⿇烦了,只⽤⼀⾏代码。

var total = [0,1,2,3,4].reduce((a, b)=>a + b); //10这个⽅法是如何⼯作的呢?reduce接受⼀个函数,函数有四个参数,分别是:1、上⼀次的值;2、当前值;3、当前值的索引;4、数组;我们还是以上⾯那个数组为例,把这⼏个参数打印出来看看:[0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, index, array){return previousValue + currentValue;});得到的结果是:分析⼀下这个结果,这个回调函数共调⽤了4次,因为第⼀次没有previousValue,所以直接从数组的第⼆项开始,⼀只调⽤到数组结束。

reduce还有第⼆个参数,我们可以把这个参数作为第⼀次调⽤callback时的第⼀个参数,上⾯这个例⼦因为没有第⼆个参数,所以直接从数组的第⼆项开始,如果我们给了第⼆个参数为5,那么结果就是这样的:[0, 1, 2, 3, 4].reduce(function(previousValue, currentValue, index, array){return previousValue + currentValue;},5);第⼀次调⽤的previousValue的值就⽤传⼊的第⼆个参数代替,函数被调⽤了5次,也就是数组的length。

JavaScript中十种一步拷贝数组的方法实例详解

JavaScript中十种一步拷贝数组的方法实例详解

JavaScript中⼗种⼀步拷贝数组的⽅法实例详解JavaScript中我们经常会遇到拷贝数组的场景,但是都有哪些⽅式能够来实现呢,我们不妨来梳理⼀下。

1、扩展运算符(浅拷贝)⾃从ES6出现以来,这已经成为最流⾏的⽅法。

它是⼀个很简单的语法,但是当你在使⽤类似于React和Redux这类库时,你会发现它是⾮常⾮常有⽤的。

numbers = [1, 2, 3];numbersCopy = [...numbers];这个⽅法不能有效的拷贝多维数组。

数组/对象值的拷贝是通过引⽤⽽不是值复制。

// numbersCopy.push(4);console.log(numbers, numbersCopy);// [1, 2, 3] and [1, 2, 3, 4]// 只修改了我们希望修改的,原数组不受影响// nestedNumbers = [[1], [2]];numbersCopy = [...nestedNumbers];numbersCopy[0].push(300);console.log(nestedNumbers, numbersCopy);// [[1, 300], [2]]// [[1, 300], [2]]// 由于公⽤引⽤,所以两个数组都被修改了,这是我们不希望的2、for()循环(浅拷贝)考虑到函数式编程变得越来越流⾏,我认为这种⽅法可能是最不受欢迎的。

numbers = [1, 2, 3];numbersCopy = [];for (i = 0; i < numbers.length; i++) {numbersCopy[i] = numbers[i];}这个⽅法不能有效的拷贝多维数组。

因为我们使⽤的是=运算符,它在处理数组/对象值的拷贝时通过引⽤⽽不是值复制。

// numbersCopy.push(4);console.log(numbers, numbersCopy);// [1, 2, 3] and [1, 2, 3, 4]// nestedNumbers = [[1], [2]];numbersCopy = [];for (i = 0; i < nestedNumbers.length; i++) {numbersCopy[i] = nestedNumbers[i];}numbersCopy[0].push(300);console.log(nestedNumbers, numbersCopy);// [[1, 300], [2]]// [[1, 300], [2]]// 由于公⽤引⽤,所以两个数组都被修改了,这是我们不希望的3、while()循环(浅拷贝)和for() 类似。

js数组 filter方法

js数组 filter方法

js数组 filter方法《JavaScript数组的filter方法详解与实例》一、概述JavaScript数组的filter方法是一种非常实用的数组操作方法,它可以根据提供的函数过滤出符合条件的元素,并返回一个新的数组。

filter方法在处理数组中的数据筛选、数据过滤等场景时非常有用。

二、filter方法详解filter方法接受一个回调函数作为参数,该回调函数用于指定过滤条件。

回调函数的参数依次为当前元素、索引和数组本身。

如果回调函数返回true,则该元素会被包含在新数组中;如果返回false,则该元素会被过滤掉。

语法:Array.filter(callback(item, index, array))参数:* callback:必选,一个回调函数,用于指定过滤条件。

* item:当前元素。

* index:当前元素的索引。

* array:原始数组。

返回值:返回一个新数组,包含符合条件的元素。

示例:// 创建一个数字数组let numbers = [1, 2, 3, 4, 5, 6];// 使用filter方法过滤出大于3的数字let filteredNumbers = numbers.filter(function(item) {return item > 3;});console.log(filteredNumbers); // [4, 5, 6]三、应用场景1. 数据筛选:在处理大量数据时,使用filter方法可以快速筛选出符合条件的元素,提高代码效率。

2. 数据过滤:根据特定的条件过滤出符合要求的元素,如过滤出特定类型的对象、过滤出指定范围内的数字等。

3. 遍历数组:使用filter方法可以方便地遍历数组中的元素,同时根据条件进行筛选。

4. 组合多个条件:可以将多个条件组合在一起,使用逻辑运算符(如&&、||)实现。

四、注意事项1. filter方法不会修改原始数组,而是返回一个新的数组。

JavaScript遍历数组的三种方法map、forEach与filter实例详解

JavaScript遍历数组的三种方法map、forEach与filter实例详解

JavaScript遍历数组的三种⽅法map、forEach与filter实例详解本⽂实例讲述了JavaScript遍历数组的三种⽅法map、forEach与filter。

分享给⼤家供⼤家参考,具体如下:前⾔近⼀段时间,因为项⽬原因,会经常在前端对数组进⾏遍历、处理,JS⾃带的遍历⽅法有很多种,往往不加留意,就可能导致知识混乱的现象,并且其中还存在⼀些坑。

前端时间在ediary中总结了js原⽣⾃带的常⽤的对数组遍历处理的⽅法,分别为:map、forEach、filter,在讲解知识点的同时,会类⽐相识的函数进⾏对⽐,这样会有助于思考⽅法的利与弊。

⼀、Js⾃带的map()⽅法1.⽅法概述map()⽅法返回⼀个由原数组中的每个元素调⽤⼀个指定⽅法后的返回值组成的新数组2.格式说明var newArray = ["1","2","3"].map(fucntion(e,i,arr){return parseInt(e,10)})map中回调函数中的第⼀个参数为:当前正在遍历的元素map中回调函数中的第⼆个参数为:当前元素索引map中回调函数中的第三个参数为:原数组本⾝3.使⽤说明3.1 ⽀持return返回值;3.2 return是啥,相当于把数组中的这⼀项变为啥(并不影响原来的数组,只是相当于把原数组克隆⼀份,把克隆的这⼀份数组中的对应项改变了)3.3 map只能对元素进⾏加⼯处理,产⽣⼀个新的数组对象。

⽽不能⽤它来进⾏筛选(筛选⽤filter),为什么不能,看个例⼦就知道了:4.例⼦4.1 在字符串中使⽤在⼀个String上使⽤map⽅法获取字符串中每个字符所对应的ASCII码组成的数组var map = Array.prototype.mapvar a = map.call("Hello World", function(e){return e.charCodeAt(0);})// a的值为[72,101,108,108,111,32,87,111,114,108,100]5.易犯错的点5.1 很多时候,map给回调函数传的是⼀个值,但是也有可能传2个、3个值,例如下⾯的例⼦var map = Array.prototype.mapvar a = map.call("Hello World", function(e){return e.charCodeAt(0);})// a的值为[72,101,108,108,111,32,87,111,114,108,100]为什么会这样,因为parseInt就是⼀个函数,它就是作为map的⼀个回调函数,parseInt接收两个参数,⼀个是String,⼀个是进制上⾯的函数就可以化为:["1","2","3"].map(parseInt(string, radix));即["1","2","3"].map(function(string, radix){return parseInt(string, radix)})// 所以才返回结果为:[1, NaN, NaN]6.与map相关6.1 Map对象es6提供⼀个对象Map,看看这个Map建的对象到底是啥东西它是⼀个对象,size是它的属性,⾥⾯的值封装在[[Entries]]这个数组⾥⾯myMap.set(1, "a"); // 相当于java的map.put();myMap.set(2, "b");myMap.set(3, "c");myMap.size();myMap.get(1);myMap.get(2);myMap.get(3);⼆、Js⾃带的forEach()⽅法1.⽅法概述forEach()⽅法返回⼀个由原数组中的每个元素调⽤⼀个指定⽅法后的返回值组成的新数组2.格式说明forEach⽅法中的function回调有三个参数,第⼀个参数为:当前正在遍历的元素第⼆个参数为:当前元素索引第三个参数为:原数组本⾝[].forEach(function(value, index, array))3.使⽤说明3.1 这个⽅法没有返回值,仅仅是遍历数组中的每⼀项,不对原来数组进⾏修改但是可以⾃⼰通过数组索引来修改原来的数组3.2 forEach()不能遍历对象,可以使⽤for in4.缺点4.1 您不能使⽤break语句中断循环,也不能使⽤return语句返回到外层函数4.2 ES5推出的,实际性能⽐for还弱5.例⼦5.1 通过数组索引改变原数组var obj = [1,2,3,4,5,6]var res = obj.forEach(function(item, index, arr) {arr[index] = item * 10;})console.log(res); // --> undefinedconsole.log(obj); // --> [10,20,30,40,50,60]5.2 如果数组在迭代的时候被修改,则当前元素与前⾯的元素会跳过。

js数组常见操作方法

js数组常见操作方法
JavaScript 数组是一种非常常见的数据结构,用于存储多个值。

它可以轻松地添加、删除和修改数组中的元素。

下面是一些常见的JavaScript 数组操作方法:
1. push() 方法:向数组的末尾添加一个或多个元素,并返回新数组的长度。

2. pop() 方法:从数组的末尾删除一个元素,并返回该元素的值。

3. shift() 方法:从数组的开头删除一个元素,并返回该元素的值。

4. unshift() 方法:向数组的开头添加一个或多个元素,并返回新数组的长度。

5. splice() 方法:从数组中添加或删除元素。

6. slice() 方法:返回从指定位置开始到指定位置结束前的元素,而不修改原始数组。

7. concat() 方法:通过合并两个或多个数组来创建一个新数组。

8. sort() 方法:对数组的元素进行排序。

9. reverse() 方法:颠倒数组中元素的顺序。

以上这些方法是 JavaScript 数组操作中最常用的一些方法,但实际上 JavaScript 对数组操作的方法还有很多,需要根据实际需要选择合适的方法。

当你了解了这些方法的基本用途和应用场景后,你可以更好地操作 JavaScript 数组。

JavaScript中数组Array.sort()排序方法详解

JavaScript中数组Array.sort()排序⽅法详解JavaScript中数组的sort()⽅法主要⽤于对数组的元素进⾏排序。

其中,sort()⽅法有⼀个可选参数。

但是,此参数必须是函数。

数组在调⽤sort()⽅法时,如果没有传参将按字母顺序(字符编码顺序)对数组中的元素进⾏排序,如果想按照其他标准进⾏排序,就需要进⾏传⼀个参数且为函数,该函数要⽐较两个值,并且会返回⼀个⽤于说明这两个值的相对顺序的数字。

1、对数字数组进⾏由⼩到⼤的顺序进⾏排序。

代码:var arr = [22,12,3,43,56,47,4];arr.sort();console.log(arr); // [12, 22, 3, 4, 43, 47, 56]arr.sort(function (m, n) {if (m < n) return -1else if (m > n) return 1else return 0});console.log(arr); // [3, 4, 12, 22, 43, 47, 56]2、对字符串数组执⾏不区分⼤⼩写的字母表排序。

代码:var arr = ['abc', 'Def', 'BoC', 'FED'];console.log(arr.sort()); // ["BoC", "Def", "FED", "abc"]console.log(arr.sort(function(s, t){var a = s.toLowerCase();var b = t.toLowerCase();if (a < b) return -1;if (a > b) return 1;return 0;})); // ["abc", "BoC", "Def", "FED"]3、对包含对象的数组排序,要求根据对象中的年龄进⾏由⼤到⼩的顺序排列代码:var arr = [{'name': '张三', age: 26},{'name': '李四', age: 12},{'name': '王五', age: 37},{'name': '赵六', age: 4}];var objectArraySort = function (keyName) {return function (objectN, objectM) {var valueN = objectN[keyName]var valueM = objectM[keyName]if (valueN < valueM) return 1else if (valueN > valueM) return -1else return 0}}arr.sort(objectArraySort('age'))console.log(arr) // [{'name': '王五', age: 37},{'name': '张三', age: 26},{'name': '李四', age: 12},{'name': '赵六', age: 4}]以上就是本⽂的全部内容,希望本⽂的内容对⼤家的学习或者⼯作能带来⼀定的帮助,同时也希望多多⽀持!。

js arr 方法

js arr 方法JavaScript(简称JS)是一种脚本语言,用于为网页添加交互性和动态性。

JS作为一种非常流行的编程语言,在网页开发中有着广泛的应用,而数组是JS中最常用的数据结构之一,以其强大的方法被广泛使用。

本文将重点介绍JS中与数组相关的方法——arr方法。

一、数组的定义在javascript中,可以使用[]或new Array()语句定义一个数组。

其中,使用[]在实际开发中更常见,如下面的例子:var arr = ["apple", "banana", "orange"];此时,变量arr就代表了一个数组,其中存储了三个元素——"apple", "banana", "orange"。

二、数组的常规操作1、获取数组元素可以使用数组下标的方式来获取数组元素,下标从0开始。

例如arr[0]表示获取arr数组中的第一个元素,即"apple"。

2、添加/删除数组元素在数组末尾添加一个元素,可以使用push方法。

例如arr.push("pear"),即向arr数组末尾添加一个元素"pear"。

删除数组末尾的元素,可以使用pop方法。

例如arr.pop(),即删除arr数组末尾的元素"orange"。

3、获取/设置数组长度可以使用数组的length属性来获取数组的长度。

例如arr.length表示获取arr数组的长度,即3。

可以使用length属性来设置数组的长度。

例如如果要将arr数组的长度设置为4,则可以使用arr.length = 4。

此时,数组会自动在末尾添加一个undefined元素。

三、数组的高级操作1、forEach方法forEach方法可以遍历数组中的每个元素,并对每个元素执行指定的操作。

JavaScript之数组(Array)详解

JavaScript之数组(Array)详解篇一:Javascript数组及其操作Javascript数组及其操作1.如何创建数组2.如何对数组进行操作(添加,删除,读取)3.数组常见方法和属性如何创建一个数组,一般地根据初始化设定简单分为3种:1.单纯创建数组:var arr=new Array();要点:用new关键字创建数组对象Array(),Array()对象是一个本地类,可以用new创建一个对象后使用2.创建数组的同时规定数组大小:var arr=new Array(10);//这里就创建了一个初始化大小为10的数组注意:当使用数组大小操作初始化大小时,数组会自动被撑大,不会像C语言那样发生错误.动态增长是js数组的一个性质.另外,js中支持最大数组长度为42949672953.直接初始化:var arr=new Array("love","hate","pain");//这里就直接初始化了数组或var arr=["happy","cute","scare"];//括号也可以声明一个数组对象当然,类似C语言,可以定义2维3维和多维的数组,例如:var myArray = new Array();for(var i=0;i myArray[i]=new Array();myArray[i][0]=Math.floor(Math.random()*10);myArray[i][1]=Math.floor(Math.random()*10);myArray[i][2]=Math.floor(Math.random()*10);myArray[i][3]=Math.floor(Math.random()*10);myArray[i][4]=Math.floor(Math.random()*10);myArray[i][5]=Math.floor(Math.random()*10);myArray[i][6]=Math.floor(Math.random()*10);myArray[i][7]=Math.floor(Math.random()*10);myArray[i][8]=Math.floor(Math.random()*10);}myArray.sort( function(x, y) ...{return(x[0]==y[0])?((x[4]==y[4])?(x[8]-y[8]):(x[4]-y[4])):(x[2]-y[2])});for(var i=0;i document.write(myArray[i].join(",") + "");}数组的属性:lengtharr.length返回数组arr的长度,常见于循环中对数组的遍历,比如:for(var i=0;i 执行部分}数组元素的访问: arr[index],其中index表示索引即数组基数,从0开始,共有arr.length个元素.比如: arr[0]访问第一个数组元素,arr[1]访问第二个数组元素....依次类推数组的操作方法:先概览下下面的这些操作数组常用的方法(13个)toString(),valueOf(),toLocalString(),join(),split(),slice(),concat(), pop(),push(),shift(),unshift(),sort(),splice()下面逐一分析这些方法的功能和用法.toString(),valueOf(),toLocalString():功能:返回数组的全部元素注:数组名也可以返回整个数组代码:var m=["am","bm","cm"];//用括号声明一个数组对象alert(m.toString());//toString()返回数组对象的所有内容,用逗号分割,即am,bm,cmalert(m.valueOf());//valueOf()也返回数组对象的所有内容alert(m.toLocaleString());//toLocaleString()也返回数组对象的所有内容,但有地区语言区别,暂不研究alert(m);//数组名也返回数组对象的所有内容join():功能:把数组各个项用某个字符(串)连接起来,但并不修改原来的数组代码:var m=["am","bm","cm"];//用括号声明一个数组对象var n=m.join("---");//用---连接am,bm,cm.alert(m.toString());//m并没有被修改,返回am,bm,cmalert(n);//n是一个字符串,为am---bm---cmsplit():功能:把一个字符串按某个字符(串)分割成一个数组,但不修改原字符串代码:var str="I love maomao,I am caolvchong";var arr=str.split("o");//按字符o把str字符串分割成一个数组alert(arr);//输出整个数组slice():返回某个位置开始(到某个位置结束)的数组部分,不修改原数组代码:var n=m.slice(2);//返回第二个元素bm后面的元素,即cm,dm,em,fmvar q=m.slice(2,5);//返回第二个元素后到第五个元素,即cm,dm,emalert(n);alert(q);数组对象的栈操作:push():数组末尾添加一个项pop():删除数组最后一个项代码:var m=["am","bm","cm","dm","em","fm"];m.push("gm");//在数组末尾添加元素gmalert(m);m.pop();//删除数组最后一个元素gmalert(m);数组对象的队列操作:unshift():数组头添加一个项shift():删除数组第一个项代码:var m=["am","bm","cm","dm","em","fm"];m.unshift("gm");//在数组第一个元素位置添加元素gmalert(m);m.shift();//删除数组第一个元素gmalert(m);sort():数组按字符的ASCII码进行排序,修改数组对象注:即便是数字数组,也将转化为字符串来进行比较排序代码:m.sort();//按字母序排序alert(m);concat():在数组尾添加元素,但不修改数组对象代码:var m=["am","bm"]var n=m.concat("cm");//添加一项cm,并且赋予新数组对象alert(m);//原数组没有被修改alert(n);//输出新数组对象splice():在数组的任意位置进行添加,删除或者替换元素,直接修改数组对象细节:splice()有三个参数或三个以上参数,前两个是必须的,后面参数是可选的进行添加:splice(起始项,0,添加项)进行删除:splice(起始项,要删除的项个数)进行替换:splice(起始项,替换个数,替换项) 这个其实是添加删除的共同结果代码:var m=["am","bm"]m.splice(1,0,"fm","sm");//在第一项后面添加fm和sm,返回am,fm,sm,bmalert(m);m.splice(2,1);//删除第二项后面一项(即第三项sm,返回am,fm,bm)alert(m);m.splice(2,1,"mm");//替换第二项后面一项(即第三项,返回am,fm,mm)alert(m);JavaScript数组操作函数join(delimiter): 把数组中各个元素使用分隔符(delimiter)拼成字符串concat(array1, array2, ...): 合并数组,对原数组不影响,只是返回合并后的新数组pop(): 删除并返回最后一个元素push(element1, element2, ...): 在数组末尾追加元素shift(): 删除并返回第一个元素unshift(element1, element2, ...): 在数组开始位置添加元素reverse(): 将数组元素顺序首尾反转sort(function): 给数组排序如果不给参数,默认按字符排序(所有元素是数字也不会按数字排序的) 参数必须是一个函数,类似function(a, b) {},在函数中判断a, b的大小,a>b返回正数,a slice(start, end): 返回一个新的数组,将start 开始,到end结束(不包括end)之间的元素复制到新数组中splice(start, count, replaceElement1, replaceElement2, ...): 删除或者替换数组元素,从start开始,对count个元素进行删除或替换如果提供replaceElement参数则进行替换,否则进行删除操作,被替换的元素个数和replaceElements的个数不必相等返回一个数组,包含被删除或替换掉的元素判断是否数组的方法var arrayVar = ["aaa", "bbb", "ccc"];var nonArrayVar = { length:4, otherAttribute:"attr" };document.write(arrayVar.constructor==Array);document.write("");document.write(nonArrayVar.constructor==Array);结果是true, falsegrep、mapPerl语言带出来的东西,jQuery实现selector时用了这种方式grep对数组的grep操作,指类似这样的代码:Array newArray = grep(condition, oldArray),这个操作将对oldArray 数组的每个元素进行遍历,如果当前处理元素符合条件condition,则加入到返回数组中 jQuery中的grep类似这样: function( elems, callback),elems是DOM元素集合,callback是实现selector的一些表达式函数,如果callback返回true则表明当前处理的元素符合selector表达式篇二:javaScript基础之——数组javaScript基础之——数组目录创建数组的方法 .................................................................. .. (3)数组的内置方法 .................................................................. .. (3)数组首尾位置的数据项添加及删除方法 (3)array.push( value,… ) --- 向数组的尾部添加值 (4)array.unshift( value,… ) --- 在数组头部插入一个元素 (4)array.pop( ) --- 删除并返回数组的最后一个元素 (5)array.shift( ) --- 将元素移出数组 (6)重排序方法 .................................................................. .. (6)array.reverse() --- 颠倒数组中元素的顺序 (7)array.sort( fn ) ---对数组元素进行排序 (7)数组的固定位置的增删改方法 .................................................................. (8)array.splice(start,deleteCount,value,...) --- 插入、删除或替换数组的元素 . (8)可以复制数组的方法 .................................................................. . (8)array.slice(start,end) --- 返回数组的一部分 (9)array.concat(value,…) --- 连接数组 (9)将数组转化为字符串的方法 .................................................................. . (10)array.join(separator) ---将数组元素连接起来以构建一个字符串 (10)array.toString() ---将数组转换成一个字符串 (11)array.toLocaleString() ---把数组转换成局部字符串 (11)数组的属性:length............................................................... (12)ECMAScript 5 添加的数组方法................................................................... (12)位置方法 .................................................................. (12)迭代方法 --- 不修改原数组 .................................................................. .. (13)归并方法 --- 迭代数组所有项,然后构建一个最终返回的值 (13)数组是复合数据类型(对象类型)的数据,它的数据索引为数字,从0开始,逐一递增,有个length属性,代表数组项的总数。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

JavaScript数组详解在程序语言中数组的重要性不言而喻,JavaScript中数组也是最常使用的对象之一,数组是值的有序集合,由于弱类型的原因,JavaScript中数组十分灵活、强大,不像是Java等强类型高级语言数组只能存放同一类型或其子类型元素,JavaScript在同一个数组中可以存放多种类型的元素,而且是长度也是可以动态调整的,可以随着数据增加或减少自动对数组长度做更改。

创建数组在JavaScript多种方式创建数组构造函数1.无参构造函数,创建一空数组var a1=new Array();2.一个数字参数构造函数,指定数组长度(由于数组长度可以动态调整,作用并不大),创建指定长度的数组var a2=new Array(5);3.带有初始化数据的构造函数,创建数组并初始化参数数据var a3=new Array(4,'hello',new Date());字面量1.使用方括号,创建空数组,等同于调用无参构造函数var a4=[];2.使用中括号,并传入初始化数据,等同于调用调用带有初始化数据的构造函数var a5=[10];注意点1.在使用构造函数创建数组时如果传入一个数字参数,则会创建一个长度为参数的数组,如果传入多个,则创建一个数组,参数作为初始化数据加到数组中var a1=new Array(5);console.log(a1.length);//5console.log(a1);//[],数组是空的var a2=new Array(5,6);console.log(a2.length);//2console.log(a2);//[5,6]但是使用字面量方式,无论传入几个参数,都会把参数当作初始化内容var a1=[5];console.log(a1.length);//1console.log(a1);//[5]var a2=[5,6];console.log(a2.length);//2console.log(a2);//[5,6]2.使用带初始化参数的方式创建数组的时候,最好最后不要带多余的”,”,在不同的浏览器下对此处理方式不一样var a1=[1,2,3,];console.log(a1.length);console.log(a1);这段脚本在现代浏览器上运行结果和我们设想一样,长度是3,但是在低版本IE下确实长度为4的数组,最后一条数据是undefined数组的索引与长度数组的值可以通过自然数索引访问进行读写操作,下标也可以是一个得出非负整数的变量或表达式var a1=[1,2,3,4];console.log(a1[0]);//1var i=1;console.log(a1[i]);//2console.log(a1[++i]);//3数组也是对象,我们可以使用索引的奥秘在于,数组会把索引值转换为对应字符串(1=>”1”)作为对象属性名console.log(1in a1);//true,确实是一个属性索引特殊性在于数组会自动更新length属性,当然因为JavaScript语法规定数字不能作为变量名,所以我们不能显示使用array.1这样的格式。

由此可见其实负数,甚至非数字”索引“都是允许的,只不过这些会变成数组的属性,而不是索引var a=new Array(1,2,3);a[-10]="a[-10]";a["sss"]="sss";这样我们可以看出所有的索引都是属性名,但只有自然数(有最大值)才是索引,一般我们在使用数组的时候不会出现数组越界错误也正是因为此,数组的索引可以不是连续的,访问index不存在的元素的时候返回undefinedvar a=new Array(1,2,3);a[100]=100;console.log(a.length);//101console.log(a[3]);//undefinedconsole.log(a[99]);//undefinedconsole.log(a[100]);100上面的例子中,虽然直接对a[100]赋值不会影响a[4]或a[99],但数组的长度却受到影响,数组length 属性等于数组中最大的index+1,我们知道数组的length属性同样是个可写的属性,当强制把数组的length属性值设置为小于等于最大index值时,数组会自动删除indexd大于等于length的数据,在刚才代码中追加几句a.length=2console.log(a);//[1,2]这时候会发现a[2]和a[100]被自动删除了,同理,如果把length设置为大于最大index+1的值的时候,数组也会自动扩张,但是不会为数组添加新元素,只是在尾部追加空空间a.length=5;console.log(a);//[1,2]//后面没有3个undefined元素添加/删除基本方法上面例子已经用到向数组内添加元素方法,直接使用索引就可以(index没必要连续)var a=new Array(1,2,3);a[3]=4;console.log(a);//[1,2,3,4]前面提到数组也是对象,索引只是特殊的属性,所以我们可以使用删除对象属性的方法,使用delete 删除数组元素delete a[2];console.log(a[2]);//undefined这样和直接把a[2]赋值为undefined类似,不会改变数组长度,也不会改变其他数据的index和value 对应关系栈方法上面例子总有同学就发现了,尤其是其删除方法,并不是我们希望的表现形式,我们很多时候希望删除中间一个元素后,后面元素的index都自动减一,数组length同时减一,就好像在一个堆栈中拿去的一个,数组已经帮我们做好了这种操作方式,pop和push能够让我们使用堆栈那样先入后出使用数组var a=new Array(1,2,3);a.push(4);console.log(a);//[1,2,3,4]console.log(a.length);//4console.log(a.pop(a));//4console.log(a);//[1,2,3]console.log(a.length);//3队列方法既然栈方法都实现了,先入先出的队列怎么能少,shift方法可以删除数组index最小元素,并使后面元素index都减一,length也减一,这样使用shift/push就可以模拟队列了,当然与shift方法对应的有一个unshift方法,用于向数组头部添加一个元素var a=new Array(1,2,3);a.unshift(4);console.log(a);//[4,1,2,3]console.log(a.length);//4console.log(a.shift(a));//4console.log(a);//[1,2,3]console.log(a.length);//3终极神器JavaScript提供了一个splice方法用于一次性解决数组添加、删除(这两种方法一结合就可以达到替换效果),方法有三个参数1.开始索引2.删除元素的位移3.插入的新元素,当然也可以写多个splice方法返回一个由删除元素组成的新数组,没有删除则返回空数组var a=new Array(1,2,3,4,5);删除指定前两个参数,可以使用splice删除数组元素,同样会带来索引调整及length调整var a=new Array(1,2,3,4,5);console.log(a.splice(1,3));//[2,3,4]console.log(a.length);//2console.log(a);//[1,5]如果数组索引不是从0开始的,那么结果会很有意思,有一这样数组var a=new Array();a[2]=2;a[3]=3;a[7]=4;a[8]=5;console.log(a.splice(3,4));//[3]console.log(a.length);//5console.log(a);//[2:2,3:4,4:5]上面例子可以看到,splice的第一个参数是绝对索引值,而不是相对于数组索引,第二个参数并不是删除元素的个数,而是删除动作执行多少次,并不是按数组实际索引移动,而是连续移动。

同时调整后面元素索引,前面索引不理会插入与替换只要方法第二个参数,也就是删除动作执行的次数设为0,第三个参数及以后填写要插入内容就splice 就能执行插入操作,而如果第二个参数不为0则变成了先在该位置删除再插入,也就是替换效果var a=new Array(1,2,3,4,5);a.splice(1,0,9,99,999);console.log(a.length);//8console.log(a);//[1,9,99,999,2,3,4,5]a.splice(1,3,8,88,888);console.log(a.length);//8console.log(a);//[1,8,88,888,2,3,4,5]常用方法join(char)这个方法在C#等语言中也有,作用是把数组元素(对象调用其toString()方法)使用参数作为连接符连接成一字符串var a=new Array(1,2,3,4,5);console.log(a.join(','));//1,2,3,4,5console.log(a.join(''));//12345slice(start,end)不要和splice方法混淆,slicevar a=new Array(1,2,3,4,5);console.log(a);//[1,2,3,4,5]console.log(a.slice(1,2));//2console.log(a.slice(1,-1));//[2,3, 4]console.log(a.slice(3,2));//[]console.log(a);//[1,2,3,4,5]方法用于返回数组中一个片段或子数组,如果只写一个参数返回参数到数组结束部分,如果参数出现负数,则从数组尾部计数(-3意思是数组倒第三个,一般人不会这么干,但是在不知道数组长度,想舍弃后n个的时候有些用,不过数组长度很好知道。

,好纠结的用法),如果start大于end 返回空数组,值得注意的一点是slice不会改变原数组,而是返回一个新的数组。

concat(array)看起来像是剪切,但这个真不是形声字,concat方法用于拼接数组,a.concat(b)返回一个a和b共同组成的新数组,同样不会修改任何一个原始数组,也不会递归连接数组内部数组var a=new Array(1,2,3,4,5);var b=new Array(6,7,8,9);console.log(a.concat(b));//[1,2,3,4,5,6,7,8,9]console.log(a);//[1,2,3,4,5]console.log(b);//[6,7,8,9]reverse()方法用于将数组逆序,与之前不同的是它会修改原数组var a=new Array(1,2,3,4,5);a.reverse();console.log(a);//[5,4,3,2,1]同样,当数组索引不是连续或以0开始,结果需要注意var a=new Array();a[2]=2;a[3]=3;a[7]=4;a[8]=5;a.reverse();sortsort方法用于对数组进行排序,当没有参数的时候会按字母表升序排序,如果含有undefined会被排到最后面,对象元素则会调用其toString方法,如果想按照自己定义方式排序,可以传一个排序方法进去,很典型的策略模式,同样sort会改变原数组。

相关文档
最新文档