8. 数组的扩展方法

133 阅读2分钟

数组的方法 from() / of()

from() 将伪数组转换成真正的数组

function add() {
    console.log(arguments);
    //es5转换
    let arr1 = [].slice.call(arguments)
    console.log(arr1);//[1, 2, 3]
    //es6写法
    let arr2 = Array.from(arguments)
    console.log(arr2);//[1, 2, 3]
}
add(1, 2, 3)

应用

<ul>
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
</ul>

<script>
    let lis1 = Array.from(document.querySelectorAll('li'));
    console.log(lis1);//(5) [li, li, li, li, li]
    
    //或者用扩展运算符将伪数组转换成真正的数组
    let [...lis2] = document.querySelectorAll('li');
    console.log(lis2);//(5) [li, li, li, li, li]
</script>

from() 还可以接收第二个参数,用来对每个元素进行处理

let lis = document.querySelectorAll('li');
let liContents = Array.from(lis, ele => ele.textContent);
//少声明一个变量,合并写成↓↓↓↓↓↓↓↓↓
let liContents = Array.from(document.querySelectorAll('li'), ele => ele.textContent);
console.log(liContents);//(5) ["1", "2", "3", "4", "5"]

of() 将任意的数据类型转换成数组

console.log(Array.of(3, 11, 32, '52', [23, 4, 1, 3], { id: 1, name: 'Max' }));
// (6) [3, 11, 32, "52", Array(4), {…}]

copyWithin() 将数组内部指定位置的元素覆盖到其他的位置,返回当前数组 - 用途不大只做了解

copyWithin(target, start = 0, end = this.length)

target:目的起始位置。
start:复制源的起始位置,可以省略,可以是负数。
end:复制源的结束位置,可以省略,可以是负数,实际结束位置是end-1
console.log([1, 2, 4, 5, 8, 10].copyWithin(0, 2, 4))
		  //[4, 5, 4, 5, 8, 10]

数组的方法 find() / findIndex()

find() 找出第一个符合条件的数组成员

let arr = [1, 4, 5, 3, 5, 56, 3, -3, 32, 7];
let num = arr.find(n => n < 0);//find括号内是个箭头回调函数
console.log(num);//-3

findIndex() 找出第一个符合条件的数组成员的索引

let arr = [1, 4, 5, 3, 5, 56, 3, -3, 32, 7];
let num = arr.find(n => n < 0);//find括号内是个箭头回调函数
console.log(num);//7

数组的方法 keys() / values() / entries() & next()

返回一个遍历器,可以使用 for( 变量 of 对象.遍历器 ) 进行循环遍历

let arr = ['a', 'b', 'c', 'd', 'e'];

for (let index of arr.keys()) { //对键名进行遍历
    console.log(index); // 0 1 2 3 4
};
//----------------------------------------------------------
for (let index of arr.value()) { //对值进行遍历
    console.log(index);// a b c d e
};
//----------------------------------------------------------
for (let [index, ele] of arr.entries()) { //对键值对进行遍历
    console.log(index, ele);// 0"a" 1"b" 2"c" 3"d" 4"e"
};

next() 表示下一次调用,进行单次遍历,超出范围会返回undefined

let arr = ['a', 'b', 'c'];
let it = arr.entries();
console.log(it.next().value); //(2) [0, "a"]
console.log(it.next().value); //(2) [1, "b"]
console.log(it.next().value); //(2) [2, "c"]
console.log(it.next().value); //undefined

数组的方法 includes()

返回一个布尔值,表示某个数组是否包含给定的值,可以直接用if判断语句

let arr = ['a', 'b', 'c'];

console.log(arr.includes('a')); //true
console.log(arr.includes('e')); //false