数组的扩展
上一期我们讲解了函数扩展的相关内容,这一期我们开始讲解数组的相关内容。
- 数组的遍历
- for…of循环的使⽤实例
- Array.from()
- Array.of()
- 数组实例的 find() 和 findIndex()
- 数组实例的 some() 和 every()
- 数组实例的 fill()
目录
1、数组的遍历
传统方式:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
let arr=[1,2,3];
for (let i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
</script>
</body>
</html>
使用forin遍历数组:会将索引不是数字的也遍历出来
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
let arr=[1,2,3];
arr.name="123";
for(let i in arr){
console.log(arr[i])
}
/*
1
2
3
123
* */
</script>
</body>
</html>
使用foreach遍历数组:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
let arr=[1,2,3];
arr.name="123";
arr.forEach(function (v){
console.log(v)
});
/*
1
2
3
* */
</script>
</body>
</html>
使用箭头函数遍历:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
let arr=[1,2,3];
arr.name="123";
arr.forEach(value => console.log(value));
/*
1
2
3
* */
</script>
</body>
</html>
使用forof遍历数组:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
let arr=[1,2,3];
arr.name="123";
for (let number of arr) {
console.log(number)
}
/*
1
2
3
* */
</script>
</body>
</html>
2、For…of循环的使用实例
- for…of 语句创建⼀个循环来迭代可迭代的对象。
- 在 ES6 中引⼊的 for…of 循环,以替代 for…in 和 forEach(),并⽀持新的迭代协议。
- for…of 允许你遍历Arrays(数组),Strings(字符串),Maps(映射),Sets(集合)等可迭代的数据结构等。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
//数组对象entries()⽅法返回⼀个数组的迭代对象,该对象包含数组的键值对(key/value)。
//1.使⽤for...of遍历数组:
let a = ['zhangsan','lisi','wangwu'];
for(let [k,v] of a.entries()){
console.log(k,v);
}
//0 "zhangsan"
//1 "lisi"
//1 "lisi"
//2.使⽤for...of遍历Maps(映射)
const iterable1 = new Map([['one','zhangsan'],['two','lisi'],
['three','wangwu']]);
for (const [key, value] of iterable1) {
console.log(`${key} -> ${value}`);
}
//one -> zhangsan
//two -> lisi
//three -> wangwu
//Set(集合) 对象允许你存储任何类型的唯⼀值,这些值可以是原始值或对象。
//3.使⽤for...of遍历Set(集合)
const iterable2 = new Set([10,30,20,10,30]);
for (const value of iterable2) {
console.log(value);
}
//10
//30
//20
//字符串⽤于以⽂本形式存储数据
//4.使⽤for...of遍历字符串
const iterable3 = 'Hello';
for (const value of iterable3) {
console.log(value);
}
//H
//e
//l
//l
//o
//5.使⽤for...of遍历arguments Object(参数对象)
function demo(){
for(const arg of arguments) {
console.log(arg);
}
}
demo('a','b','c');
//a
//b
//c
</script>
</body>
</html>
3、Array.from()
- Array.from()⽅法就是将⼀个类数组对象或者可遍历对象转换成⼀个真正的数组。
- 格式:
1.Array.from(arrayLike[, mapFn[, thisArg]])
2.arrayLike:想要转换成数组的伪数组对象或可迭代对象
3.mapFn:如果指定了该参数,新数组中的每个元素会执⾏该回调函数;
4.thisArg:可选参数,执⾏回调函数 mapFn 时 this 对象。 - 返回值:是⼀个新的数组实例(真正的数组)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
let array = {
0: 'name',
1: 'age',
2: 'sex',
3: ['user1','user2','user3'],
'length': 4
};
let arr = Array.from(array);
console.log(arr); // ['name','age','sex',['user1','user2','user3']]
</script>
</body>
</html>
Array.from()的案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Array.from()使⽤实例</title>
</head>
<body>
<ul>
<li>zhangsan</li>
<li>lisi</li>
<li>wangwu</li>
</ul>
<script type="text/javascript">
//获取上⾯的li节点对象列表
let nlists = document.querySelectorAll("li");
console.log(nlists); //NodeList(3) [li, li, li]
//将NodeList列表对象转成数组,并解析出每个元素之间的内容。
const alist = Array.from(nlists,li => li.textContent);
console.log(alist); // ["zhangsan", "lisi", "wangwu"]
</script>
</body>
</html>
4、 Array.of()
Array.of()⽅法⽤于将⼀组值转化为数组,即新建数组,⽽不考虑参数的数量或类型。
//使⽤Array.of()创建数组
console.log(Array.of()); //[] 创建⼀个空数组
console.log(Array.of(8)); //[8] 创建只有⼀个元素值为8的数组
console.log(Array.of(1, 2, 3)); //[1,2,3] 创建⼀个值为1,2,3的数组
//以前直接使⽤Array创建数组
console.log(Array()); //[] 创建⼀个空数组
console.log(Array(4)); // [ , , , ] 创建拥有4个元素空值的数组
console.log(Array(1, 2, 3)); //[1,2,3] 创建⼀个值为1,2,3的数组
5、数组实例的 find() 和 findIndex()
- find()⽅法,⽤于找出第⼀个符合条件的数组成员。
1.参数是⼀个回调函数,所有数组成员依次执⾏该回调函数。
2.直到找出第⼀个返回值为true的成员,然后返回该成员。
3.如果没有符合条件的成员,则返回undefined。 - findIndex()⽅法的⽤法与find⽅法⾮常类似,返回第⼀个符合条件的数组成员的位置。
1.返回成员位置,如果所有成员都不符合条件,则返回-1。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
const data =[
{name:'zhangsan',age:22,sex:'man'},
{name:'lisi',age:25,sex:'woman'},
{name:'wangwu',age:23,sex:'man'},
];
//使⽤find获取name属性值为lisi的信息
let s1 = data.find(function(v){
return v['name']=='lisi'
});
//同上效果使⽤箭头函数
let s2 = data.find(v => v['name']=='lisi');
console.log(s1); //{name: "lisi", age: 25, sex: "woman"}
console.log(s2); //{name: "lisi", age: 25, sex: "woman"}
//使⽤find获取name属性值为lisi的信息
let s3 = data.findIndex(function(v){
return v['name']=='lisi'
});
//同上效果使⽤箭头函数
let s4 = data.findIndex(v => v['name']=='lisi');
console.log(s3); //1
console.log(s4); //1
</script>
</body>
</html>
6、数组实例的 some() 和 every()
- every()和 some()⽬的:确定数组的所有成员是否满⾜指定的测试.
1.some()⽅法 只要其中⼀个为true 就会返回true。
2.every()⽅法必须所有都返回true才会返回true,哪怕有⼀个false,就会返回false。 - 即:every:⼀假即假; some:⼀真即真。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<script>
const data =[
{name:'zhangsan',age:22,sex:'man'},
{name:'lisi',age:25,sex:'woman'},
{name:'wangwu',age:23,sex:'man'},
];
//使⽤some判断data中是否含有⼀条name以"wang"开头的
let s1 = data.some(v => v['name'].startsWith("wang"));
console.log(s1); //true
//使⽤every判断data信息中是否都是age⼤于20的信息。
let s2 = data.every(v => v['age']>20);
console.log(s2); //true 若有⼀个不符合则返回false
</script>
</body>
</html>
7、数组实例的 .fill()
- fill()函数,使⽤指定的元素替换原数组内容,会改变原来的数组。
- 语法结构:arr.fill(value[, start[, end]])
1.value:替换值。
2.start:替换起始位置(数组的下标),可以省略。
3.end:替换结束位置(数组的下标),如果省略不写就默认为数组结束。<hr style=" border:solid; width:100px; height:1px;" color=#000000 size=1">
//空数组则没有替换
console.log([].fill(6)); //[]
//将数组中的值都替换成指定值6
console.log([1,2,3].fill(6));//(3) [6, 6, 6]
//从数组索引位置2开始替换成指定值6,替换到数组结束位置。
console.log([1,2,3,4,5].fill(6,2)); //(5) [1, 2, 6, 6, 6]
//从数组索引位置2开始替换到索引位置4前结束。
console.log([1,2,3,4,5].fill(6,2,4)); //(5) [1, 2, 6, 6, 5]
总结
这期我们讲解了数组的扩展方面的内容,下期我们讲解Set和Map相关的知识