「这是我参与2022首次更文挑战的第11天,活动详情查看:2022首次更文挑战」
Array
创建方式:
- new Arrary( )
- [ ]
new Array方式创建数组,如果传入数值参数n,则数组长度为n。 如果传入多个字符串,或数值,则创建相应的数组。因此容易产生错误。
let a = new Array(3);
let b = new Array(2, 3, 5, 6);
console.log(a);//[empty × 3]
console.log(b);//[2, 3, 5, 6]
注意:使用数组字面量定义数组并不会实际调用Array() 构造函数;
from()和of()方法
from()将类数据转换为数组
of( )将一组参数转换为数组实例
数组空位
for in 遍历空位数组无法识别空位,但数组长度是正确的
let a = [1, , , 2];
for (const item in a) {
console.log(item); // 0 3
}
for( ) 和for of 都会将空位字符遍历为undefined
let a = [1, , , 2];
for (let i = 0; i < a.length; i++) {
console.log(a[i]);
}
length
length属性是可以修改的,legth的值决定数组元素的个数。
检测数组
在一个页面中:instanceof
if (a instanceof Array) {
• console.log(true);
• }
在多个页面使用不同框架时:
if (Array.isArray(a)) {
console.log(true);
}
转换方法
valueOf( )返回数组本身,仍然是数组
toString() 返回以逗后隔开每一个元素的字符串
toLocaleString() 返回以逗后隔开每一个元素的字符串
join(相隔符 )返回以相应符号隔开元素的字符串
栈方法
push( )可以传入任意多个参数,在数组的末尾添加值,返回新数组的长度
pop( ) 删除最后一项,并返回这一项
队列方法
shift( )删出第一项,并返回这一项
unshift( )可以传入任意多个参数,在数组的开头添加值,返回新数组的长度
排序方法
sort( )
//升序排列
let a = [1, 5, 2, 4, 15];
function compare(value1, value2) {
if (value1 < value2) {
return -1;
} else if (value1 > value2) {
return 1
} else {
return 0
}
}
a.sort(compare);
console.log(a); //[1, 2, 4, 5, 15] 升序排列
//降序排列
let a = [1, 5, 2, 4, 15];
function compare(value1, value2) {
if (value1 < value2) {
return 1;
} else if (value1 > value2) {
return -1
} else {
return 0
}
}
a.sort(compare);
console.log(a);// [15, 5, 4, 2, 1] 降序排列
比较函数返回值 :大于0,value1排在value2的后面,等于零,不变。小于零,value1应该排在value2的前面。
reverse( ):反转数组
搜索和位置方法
严格相等
indexof( ) 从头匹配相应元素,参数一为要匹配的元素,参数二为从当前下标开始
lastIndexof( ) 从末尾向前匹配相应元素,参数一为要匹配的元素,参数二为从当前下标开始
includes( )es7新增方法 从头匹配是否存在相应元素,参数一为要匹配的元素,参数二为从当前下标开始 ,返回布尔值
注意;匹配的规则为全等(===)
下面的例子中people数组中无法匹配到person对象的原因:对象是引用类型,person对象和people中的第一个元素只是两个对象的值相等,他们是两个不同的对象,而全等对于引用类型来说是指向同一个对象,因此people中匹配person对象是无法匹配到的。
let person = {
name: 'nike'
};
let people = [{
name: 'nike'
}];
let morepeople = [person];
console.log(people.indexOf(person)); //-1
console.log(morepeople.indexOf(person)); //0
console.log(people.includes(person)); //false
console.log(morepeople.includes(person)); //true
断言方法
断言函数接受三个参数 :元素,索引 ,数组本身
find( ) 从头开始匹配,匹配到第一个符合的元素之后不在遍历。返回第一个的匹配的元素;
findIndex( ) 从头开始匹配,匹配到第一个符合的元素之后不在遍历。返回第一个的匹配的元素的索引值;
const people = [{
name: 'wang1',
age: 15
}, {
name: 'matong',
age: 23
}];
console.log(people.find((element) => element.age > 20)); //{name: 'matong', age: 23}
console.log(people.findIndex((element) => element.age > 20)); //1
let arr = [2, 5, 6, 3, 7, 8];
arr.find((element, index, array) => {
console.log(element);
console.log(index);
console.log(array);
return element == 5;
});
//输出结果
2
0
(6) [2, 5, 6, 3, 7, 8]
5
1
(6) [2, 5, 6, 3, 7, 8]
迭代方法
every( ) 对数组每一样都运行传入的函数,如果都返回true,则这个方法返回true
some( )对数组每一样都运行传入的函数,只要有一项返回true,则这个方法返回true
filter( )对数组每一样都运行传入的函数,返回true的项组成一个新数组
map( )对数组每一样都运行传入的函数,返回由每次函数调用的结果构成的数组;
foreach( ) 遍历数组,相当于for循环
都可以传入三个参数:数组元素,数组索引,数组本身 所有方法都不改变原来数组
const numbers = [1, 2, 3, 4, 5, 2, 1];
let numevery = numbers.every((item, index, array) => item > 1);
console.log(numevery);
console.log(numbers.some((item) => item > 2));
console.log(numbers.filter((item) => item > 2));
console.log(numbers.map((item) => item * 2));
console.log(numbers);
结果:
归并方法
reduce( ) 和reduceRight( )都可以插入两个参数,一是归并函数,而是归并初始值
const numbers = [1, 2, 3, 4, 5, 2, 1];
let sum = numbers.reduceRight((prev, cur, index, array) => prev + cur, 0);
console.log(sum);//18
join()
join() 方法将数组作为字符串返回。
元素将由指定的分隔符分隔。默认分隔符是逗号 (,)。