[JS数组方法合集|青训营笔记]

79 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 十一 天

Some()方法

some() 方法会依次执行数组的每个元素:

  • 如果有一个元素满足条件,则表达式返回true , 剩余的元素不会再执行检测。
  • 如果没有满足条件的元素,则返回false。

用法some(<function>)<function>处接一个函数,函数接收一个值,代表数组的每一个值。将这个值带入函数内,在函数内做一个条件判断。

some(i=>i>1)意思是如果检测到有一个元素大于一,就返回false

...扩展运算符

扩展运算符能将数组转换成用逗号分割的参数序列,常用于扁平数组(一次只能打开一层哦)和在将数组作为参数的时候使用,下述代码输出[1,2,3,4]

var arr = [1,2,3,4]
console.log([...arr]);

但是要注意参数序列并不是序列,下面这样写就会报错

var arr = [1,2,3,4]
console.log(...arr);

对对象这样扩展也会报错,报错信息TypeError: arr is not iterable(arr不可迭代)

var arr = {a:1,b:2}
console.log([...arr]);

但若是arguments则不会报错

function fun() {
  console.log(...arguments);
}
fun(1, 2, 3)   // 1 2 3

然后我最近新发现了一个逆向的用法,非常有意思

function fun5(...params) { 
console.log(params); // [ 1, 2, 3, 4 ] }
fun5(1, 2, 3, 4)

可以发现,我们传了一个参数序列给...params,他直接被反向转换成了一个数组

Concat()方法

此方法可以将数组拼接,话不多说,show you the code

var arr1 = [1]
var arr2 = [2]
console.log(arr1.concat(arr2));//[ 1, 2 ]

参数可以很多个

var arr1 = [1]
var arr2 = [2]
var arr3 = [3]
console.log(arr1.concat(arr2,arr3));//[ 1, 2, 3 ]

参数不一定要是数组(所以可以搭配扩展运算符使用)

var arr1 = [1]
var arr2 = [2]
var num = 3
console.log(arr1.concat(arr2,num));///[ 1, 2, 3 ]


var arr1 = [1]
var arr2 = [2,3]
console.log(arr1.concat(...arr2));//[ 1, 2, 3 ]

也可以是字符串,非常之多样化的家人们

var arr1 = [1]
var arr2 = [2]
var string = '3'
console.log(arr1.concat(arr2,string));

当上述三种方法结合在一起实现数组扁平:(学以致用一下,可以顺便考察一下自己,看能不能理解下列代码)

var arr = [1, [2, [4, [5, [6]]]]]

function myFlatten(arr) {
	while (arr.some(item => Array.isArray(item))) {
		arr = [].concat(...arr)
	}
	return arr
}
console.log(myFlatten(arr))  // [1,2,3,4,5,6]