javascript 数组 方法 函数 实例 讲解

静态方法:
Array.isArray()

实例方法:
valueOf(): 返回数组本身

改变原数组:
push():
在末尾添加一个元素,返回新数组长度

pop() :
删除数组的最后一个元素,返回被删除的元素

shift():
删除数组的第一个元素并返回该元素(遍历清空数组)

unshift():
在数组的第一个位置添加一个元素,并返回数组长度

reverse():
颠倒原数组的排列顺序

splice(start,sum(个数),new1,new2):
删除数组的一部分(两个参数),在数组的指定位置插入元素(0,插入的元素),替换数组元素(三个参数以上),
如果只有一个参数,则把原数组分为两个数组
var old1 = [1,2,3,4].splice(2) // 1,2 此时,原数组的值为 3,4

sort(function(a,b){两个形参之间的对比,根据返回结果进行排列}):
对数组成员进行默认排序,无参按照默认排序,有参根据自定义函数排序(函数返回值须为数值,根据从小到大排序)
arr.sort(function(a,b){return a-b})

不改变原素组:
join():
以参数作为分隔符,将数组元素连接为一个字符串返回,不传参则默认分隔符为逗号

concat():
数组合并,将新数组合并到原数组的后面并返回(返回的值根据原数组的改变而改变,合并的只是原数组的引用),原数组不变

slice(起点,终点):
截取目标数组的一部分,省略第二个参数就一直截取到最后一个,参数为负数则倒数计算
重要应用:真伪数组转换: [].slice.call()
var real = Array.prototype.slice.call({ 0: ‘a’, 1: ‘b’, length: 2 }) 注意这里的 “length:2” 必须有 否则返回""
console.log(Array.isArray(real)) // true

map(function(item,index,arraySelf){return n++}):
将数组内的元素逐个放入函数中处理,最后返回一个新数组 如果有第二个参数,map内函数的this就指向map的第二个参数

forEach(): 除了不会返回数据,其它的跟map一致。 此方法无法像for一样可以中断执行,总是会遍历完所有元素
此方法遍历元素时,不会跳过undefined和null但是会跳过 空位 “”

filter(function(item,index,arr){return n === true},arr):
元素过滤,在函数中自定义过滤规则,通过规则的元素组成新数组返回

some(function(item,index,arr){},arr):
返回布尔值,数组中只要有一个元素符合规则,则返回true

every(function(item,index,arr){},arr):
返回布尔值,数组中只要有一个元素不符合规则,则返回false

reduce(function(a,b,index,arr){return a+b},sum) /reduceRight()元素倒过来操作:
a:累加值(默认为第一个元素) b:当前值(默认为第二个元素) index:当前位置(默认为0) sum:默认初始值 arr:原数组
处理数组内的内一个元素,最终累加为一个值

indexOf(ele,index):
返回给定元素第一次在数组中出现的位置,如果没有,返回 -1 ele:搜索的值, index:从哪里开始搜索

lastIndexOf(ele,index):
返回给定元素最后一次在数组中出现的位置,如果没有,返回 -1 ele:搜索的值, index:从哪里开始搜索

<!DOCTYPE html>
<html>

	<head>
		<meta charset="UTF-8">
		<title>数组的元素可以是任意的数据类型甚至是函数</title>
		<script>
			// 真伪数组转换
			var real = Array.prototype.slice.call({
				0: 'a',
				1: 'b',
				length: 2
			})
			console.log(Array.isArray(real)) // true

			// map(function(item,index,arrSelf){}) map只有一个参数
			var result = [1, 2, 3].map(function(n) {
				return n + 1
			})
			console.log(result) // 2,3,4 

			// map可以有两个参数 map(function(item,index,arrSelf){},arr)
			result = [1, 2, 3].map(function(item, index, arr) {
				// 这里的 this 绑定 [4,5,6] function 的实参为数组 [1,2,3] 
				item = this[index] + 1
				return item
			}, [4, 5, 6])

			console.log(result) // 5,6,7

			//reduce
			result = [1, 2, 3, 4, 5].reduce(function(a, b) {
				return a + b
			})

			console.log(result)

			//新建数组语法1: 
			var arr = new Array();
			arr[arr.length] = 1;
			arr[arr.length] = 2;
			arr[arr.length] = 3;
            console.log(arr) // 1,2,3
            
			//新建数组语法2:
			var arr2 = [0, 1, 2, 3, 4, 5, 6];

			//新建数组语法3:(不推荐)
			var arr = new Array(7, 8, 9, 10, 11);
			//创建一个长度为5的数组:
			var arr3 = new Array(5);

			console.log("获取数组长度" + arr.length);
			//修改数组的长度:小了,删除,多了,超出,添加null值
			arr.length = 4;
			console.log("修改数组长度为4:" + arr);
			arr.length = 2;
			console.log("修改数组长度为2:" + arr);

			console.log("unshift方法向开头添加元素并返回新长度:" + arr.unshift(1, 2, 3));
			console.log(arr); //插入元素以后其他元素的会依次调整

			console.log("push()方法向数组的末尾添加一个元素并返回数组的长度:" + arr.push(arr.length));
			console.log("使用push()方法后的数组:" + arr);

			console.log("shift()删除并返回数组的第一个元素:" + arr.shift());
			console.log("shift()后的数组:" + arr);

			console.log("使用pop()方法删除数组的最后一个元素并返回该元素的值:" + arr.pop());
			console.log("使用pop()方法后的数组:" + arr);

			//slice()方法不改变数组原来的结构,用于获取某段元素,例0~3之间:包含开始不包含结尾
			//参数可以使用一个负值,表示倒着数
			console.log("使用slice从数组提取第一,二个元素:" + arr.slice(0, 2));

			/*splice()方法会影响数组的结构  多功能方法
			 * 第一个参数:开始位置;
			 * 第二个参数:操作的数量;
			 * 第三及更多参数:可插入到开始位置:
			 * 		若操作数为0,则实现插入;
			 * 		若操作数为1或以上,则实现替换;
			 * 		若无第三个参数,则实现删除。
			 */

			console.log("使用splice前的数组:" + arr);
			console.log("splice()方法用于删除并返回指定的数组元素:" + arr.splice(0, 2))
			console.log("使用splice后的数组:" + arr);

			//concat()可以连接两个或多个数组,并将新的数组返而不改变原数组
			var a = [1, 2, 3];
			var b = [4, 5, 6];
			console.log("合并后的数组:" + a.concat(b));
			console.log("合并后的原数组a:" + a);
			console.log("合并后的原数组b:" + b);

			/*join()方法:
			 * 		1、将结果作为字符串返回(将元素的类型转换为String)
			 * 		2、将参数作为字符串间的连接符并返回字符串(默认为  ,  )
			 */
			console.log("join的参数作为字符串的连接符:" + a.join("--"));

			//reverse():用于反转数组:该方法会直接修改原数组:
			console.log("reverse方法用于反转数组:" + a.reverse());
			//练习:将数组中age大于18的信息输出
			function Person(name, age) {
				this.name = name;
				this.age = age;
			}

			// filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。
			var ages = [32, 33, 16, 40];

			function checkAdult(age) {
				return age >= 18;
			}

			console.log(ages.filter(function(age){
				return age >= 18 // [ 32, 33, 40 ]
			})); 

			//reduce(acc,cur) 方法:接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
			/*最少两个参数
				Accumulator (acc) (累计器)
				Current Value (cur) (当前值) 
				Current Index (idx) (当前索引)
				Source Array (src) (源数组)
			 */

			//两个参数:
			//			console.log([1, 3, 5].reduce( (a, b) => (a * b) ) );//求数组元素的积:15

			// map(function) 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值。
			var arra = [1, 2, 3, 4]
			var arra1 = arra.map(function(n) {
				return n + 1
			})
			console.log('arra1: ' + arra1); //arra1: 2,3,4,5

			//  sort()方法:用于数组的排序:默认使用Unicode编码排序:
			//	所以对数字进行排序会得到错误的结果  解决:自定义排序规则:
			//	利用包含两个形参的匿名函数:浏览器回自动调用该实参做比较,且a一定在b的前面
			//	浏览器根据回调函数的返回值确定排序的位置:大于零:交换位置;小于等于零:位置不变:
			var aa = [5, 8, 7, 9, 4, 2, 5, 3, 6, 7];

			aa.sort(function(a, b) {
				// return a - b;
				return b - a;
			});
			console.log("自定义sort()回调用于数组的排序:" + aa.sort());

			Person.prototype.toString = function() {
				return " name:" + this.name + " age:" + this.age;
			}

			var fun1 = new Person("lili", 10);
			var fun2 = new Person("amy", 18);
			var fun3 = new Person("tom", 19);
			var fun4 = new Person("toy", 20);
			var fun5 = new Person("jerry", 15);
			var funArr = [fun1, fun2, fun3, fun4, fun5];

			function Adult(arr) {
				var arr1 = [];
				for(var i = 0; i < arr.length; i++) {
					if(arr[i].age > 18) {
						arr1.push(arr[i]);
					} else {
						continue;
					}
				}
				return arr1;
			}
			//			console.log(Adult(funArr));//输出练习结果

			//练习:祛除数组中 重复的数字:
			var arr5 = [1, 2, 3, 4, 5, 6, 1, 2, 2, 2, 2, 2, 2, 2, 4, 2, 3, 7, 8, 5, 9, 4];

			function DeleteRepeat(arr) {
				var arr1 = new Array();
				for(var i = 0; i < arr.length; i++) { //元素从头开始比较
					for(var j = i + 1; j < arr.length; j++) { //j+1表示从当前元素后面的元素开始比较
						if(arr[i] == arr[j]) {
							arr.splice(j, 1);
							j--; //删除掉一个元素后,后面的元素会向前推进,导致不能跟下一个元素比较,故j需要自减
						} else continue;
					}
				}
				return arr;
			}
			//		console.log("原数组:"+arr5);
			//		console.log("祛除重复后的数组:"+DeleteRepeat(arr5));  //祛除重复练习
		</script>
	</head>

	<body>
	</body>

</html>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值