js之旅(四)js中的数组

本文全面介绍了JavaScript中数组的各种操作方法,包括遍历、删除、过滤、反转、拼接、提取、转换、查找元素等,同时提供了示例代码,帮助读者理解和掌握数组的高级应用。

一、数组遍历

1.1 for循环

常规的数组循环方法,用法如下:

var a = [1, 2, 3, 4];
var length = a.length;
for(var i = 0; i < length; i++){
	console.log(a[i]);
}  
1.2 forEach循环
var a = [1, 2, 3, 4];
a.forEach((v, k) => {
	console.log("v: " + v + " k: " + k);
});
1.3 for of遍历
var a = [1, 2, 3, 4];
for(var v of a){
	console.log(v);
}
1.4 for in
var a = [1, 2, 3, 4];
for(var k in a){
	console.log(a[k]);
}

二、数组删除元素

js中使用splice(index, length, [target])方法实现对数组元素的删除,修改,添加,其中index为数组元素的下标,length为长度,target为要替换的元素。

2.1 删除元素
var a = [1, 2, 3, 4];
a.splice(1, 2);
console.log(a);//(2) [1, 4]
2.2 替换元素
var a = [1, 2, 3, 4];
a.splice(1, 1, "test");
console.log(a);// (4) [1, "test", 3, 4]
a.splice(2, 2, "test2");
console.log(a);//(3) [1, "test", "test2"]
2.3 添加元素
var a = [1, 2, 3, 4];
a.splice(1, 0, "test");
console.log(a);//(5) [1, "test", 2, 3, 4]

三、数组过滤

js中常见的数组过滤的方法有map()find(), filter(), some()every()

3.1 map()

map()并不会改变原数组,它将return的值构造成一个新的数组返回。

var a= [1, 2, 3, 4];
var b = a.map((v, k) => {
	console.log("v: " + v + " k:" + k);
	return v + 1;
});
console.log(a);//(4) [1, 2, 3, 4]
console.log(b);//(4) [2, 3, 4, 5]
3.2 find()

find()方法返回数组中符合测试函数条件的第一个元素。否则返回undefined

var a = [1, 2, 3, 4];
var b = a.find((v, k) => {
	console.log("v: " + v + " k:" + k);
	return v > 2;
});
console.log(a);//(4) [1, 2, 3, 4]
console.log(b);//3
3.3 filter()

filter()与find()不同的是filter将所有符合条件的元素构成一个新的数组

var a = [1, 2, 3, 4];
var b = a.filter((v, k) => {
	console.log("v: " + v + " k:" + k);
	return v > 2;
});
console.log(a);//(4) [1, 2, 3, 4]
console.log(b);//(2) [3, 4]
3.4 some()

some()是对数组中每一项运行指定函数,如果该函数对任一项返回true,则返回true

var a = [1, 2, 3, 4];
var b =  a.some((v, k) => {
	console.log("v: " + v + " k:" + k);
	return v > 2;
});
console.log(a);//(4) [1, 2, 3, 4]
console.log(b);//true
3.5 every()

与some()不同,every()是对数组中每一项运行指定函数,如果该函数对所有项都返回true,则返回true,有任意一项返回false,则为false

var a = [1, 2, 3, 4];
var b =  a.every((v, k) => {
	console.log("v: " + v + " k:" + k);
	return v > 2;
});
console.log(a);//(4) [1, 2, 3, 4]
console.log(b);//false

四、数组反转

用reverse()方法实现对数组的反转,返回反转后的数组,并且原数组也发生改变

var a = [1, 2, 3, 4];
var b = a.reverse();
console.log(a);//(4) [4, 3, 2, 1]
console.log(b);//(4) [4, 3, 2, 1]

五、数组拼接

常用的数组拼接的方法有两种,一种是使用concat()方法,一种是使用es6中点语法扩展运算符

5.1 concat()

concat()方法并不会对原来的数组造成改变,会将拼接后的数组返回

var a = [1, 2];
var b = [3, 4];
var c = a.concat(b);
console.log(a);//(2) [1, 2]
console.log(b);//(2) [3, 4]
console.log(c);//(4) [1, 2, 3, 4]
5.2 es6点语法
var a = [1, 2];
var b = [3, 4];
a.push(...b);
console.log(a);//(4) [1, 2, 3, 4]
console.log(b);//(2) [3, 4]

六、数组提取

利用slice(start, end)可以实现对数组的截取,返回start开始end结束(不包含end)的数组元素作为一个新的数组,并不会改变原来的数组

  • start: 从该索引处开始提取原数组中的元素,如果该参数为负数,则表示从原数组中的倒数第几个元素开始提取, slice(-2) 表示提取原数组中的倒数第二个元素到最后一个元素(包含最后一个元素)。如果省略 start,则 slice 从索引 0 开始。
  • end:在该索引处结束提取原数组元素(从0开始)。 slice 会提取原数组中索引从 start 到 end 的所有元素(包含start,但不包含end)。
    slice(1,4) 提取原数组中的第二个元素开始直到第四个元素的所有元素 (索引为 1, 2, 3的元素)。
    如果该参数为负数, 则它表示在原数组中的倒数第几个元素结束抽取。 slice(-2,-1) 表示抽取了原数组中的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)。
    如果 end 被省略,则 slice 会一直提取到原数组末尾。如果 end 大于数组长度, slice 也会一直提取到原数组末尾。

用法如下:

var a = [1, 2, 3, 5];
var b = a.slice(1, 2);
var c = a.slice(); // 不传参数
var d = a.slice(-2, -1);
console.log(a);//(4) [1, 2, 3, 5]
console.log(b);//[2]
console.log(c);//(4) [1, 2, 3, 5] 
console.log(d); // [3]

七、数组转为字符串

JSON.stringify()方法可以将数组转化为一个字符串(不仅仅是组数,其它对象也可以被转化为json字符串):

var a = [1, 2, 3, 4];
console.log(JSON.stringify(a));//[1,2,3,4]
console.log(a.join(",")); //1,2,3,4

八、字符串转为数组

JSON.parse()方法将字符串数组转化为数组对象:

var a = "[1,2,3,4]";
console.log(JSON.parse(a));//(4) [1, 2, 3, 4]

九、判断数组是否包含某个元素

9.1 for,every,some,find

可以利用for,every,some,find来判断数组中是否包含某个元素,这里不再细说。

9.2 indexOf

indexOf(item, start),用来判断数组中是否包含item元素,从start位置开始查询(0<= start <= length-1),如果有就返回item元素第一次出现的位置,若果没有就返回-1

var a = [1, 2, 3, 4, 3];
console.log(a.indexOf(3));//2
console.log(a.indexOf(3, 2));//2
console.log(a.indexOf(3, 3));//3

9.3 includes

indcludes是es6的方法,判断数组是否包含某个元素

var a = [1, 2, 3, 4, 3];
console.log(a.includes(3)); // true
console.log(a.includes(5)); // false

十、利用数组模仿栈

利用push(),向数组的尾部添加一个元素,利用pop(),删除数组的最后一个元素:

var a = [1, 2, 3, 4];
a.push(5);
console.log(a);//(5) [1, 2, 3, 4, 5]
a.pop();
console.log(a);//(4) [1, 2, 3, 4]

十一、利用数组模仿队列

利用push(),向数组的尾部添加一个元素,利用shift(),删除数组的第一个元素:

var a = [1, 2, 3, 4];
a.push(5);
console.log(a);//(5) [1, 2, 3, 4, 5]
a.shift();
console.log(a);//(4) [2, 3, 4, 5]

unshift()方法可以在数组头部添加一个元素:

var a = [1, 2, 3, 4];
a.unshift(5);
console.log(a);//(5) [1, 2, 3, 4, 5]

十二、Array对象

12.1 Array.from

from() 方法用于通过拥有 length 属性对象可迭代对象来返回一个数组;如果对象是数组返回 true,否则返回 false。

Array.from(object, mapFunction, thisValue)

参数描述
object必需,要转换为数组的对象。
mapFunction可选,数组中每个元素要调用的函数。
thisValue可选,映射函数(mapFunction)中的 this 对象。
12.2 fill

fill() 方法用于将一个固定值替换数组的元素。

array.fill(value, start, end)

参数描述
value必需。填充的值。
start可选。开始填充位置。
end可选。停止填充位置 (默认为 array.length)
12.3 初始化一个二维数组
let sLen = 5;
let arr = Array.from(new Array(sLen),() => new Array(sLen).fill(false));
12.4 sort

sort() 方法以字母顺序对数组进行排序

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort(); // [ "Apple", "Banana", "Mango", "Orange" ]
数字排序

默认地,sort() 函数按照字符串顺序对值进行排序。

该函数很适合字符串(“Apple” 会排在 “Banana” 之前)。

不过,如果数字按照字符串来排序,则 “25” 大于 “100”,因为 “2” 大于 “1”。

正因如此,sort() 方法在对数值排序时会产生不正确的结果。

我们通过一个比值函数来修正此问题:

var points = [40, 100, 1, 5, 25, 10];
points.sort((a, b) => a - b);  // [ 1, 5, 10, 25, 40, 100 ]
points.sort((a, b) => b - a); // [ 100, 40, 25, 10, 5, 1 ]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值