js数组API

Array稳定: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/

2018.10.30 星期二 11:00

方法

分类

## 属性
Array.length,Array.prototype,Array.prototype[@@unscopables]
## 方法
Array.from(), Array.isArray(), Array.observe(), Array.of()
实例方法 Array.prototype
concat(), copyWithin(), entries(), every(), fill(), filter(), find(), findIndex(), flat(), flatMap(), forEach(), includes(), indexOf(), join(), keys(), lastIndexOf(), map(), pop(), push(), reduce(), reduceRight(), reverse(), shift(), slice(), some(), sort(), splice(), toLocaleString(), toSource(), toString(), unshift(), values()
Array.prototype@@iterator
Array.unobserve()
get Array[@@species]

版本区分

#### 在ES5中,一共有9个Array方法
indexOf, lastIndexOf, every, some, forEach, map, filter, reduce, reduceRight

#### ES6扩展
扩展运算符, Array.from(), Array.of()
copyWithin(), find() 和 findIndex(), fill(), entries(),keys() 和 values(), includes(), flat(),flatMap()

是否改变原数组

#### 不改变
slice,concat,扩展运算符(spread), map, filter,reduce,
#### 改变
splice, push/pop,unshift/shift, copyWithin,

方法介绍

array.API(callback[, thisArg])
callback 被调用时传入三个参数:元素值,元素的索引,原数组。
thisArg:执行回调 函数时用作this的值(参考对象)。

执行函数 return/not return

forEach() 方法对数组的每个元素执行一次提供的函数。 return:undefined,并且不可链式调用

reduce() 方法对累计器和数组中的每个元素(从左到右)应用一个函数,将其简化为单个值。
arr.reduce(callback[, initialValue]) cb-return:accumulator
cb参数: accumulator 累计器, currentValue , currentIndex , array

find() 方法返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined。
findIndex()方法返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1。
indexOf()/lastIndexOf()方法返回在数组中可以找到一个给定元素的第一个索引,如果不存在,则返回-1。

return:new array

map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。
filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。

return-true/false cb-return

every()方法测试数组的所有元素是否都通过了指定函数的测试。
some() 方法测试数组中的某些元素是否通过由提供的函数实现的测试。

改变数组的操作

reverse() 方法颠倒数组中元素的位置,并返回该数组的引用。
arr.sort([compareFunction]) 方法用原地算法对数组的元素进行排序,并返回排序后的数组
shift()/pop() 方法从数组中删除第一个元素,并返回该元素的值。
array.splice(start[, deleteCount[, item1[, item2[, …]]]])

其他(不改变数组操作)

var new_array = old_array.concat(value1[, value2[, …[, valueN]]]) 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组。

arr.slice(begin, end) 方法返回一个新的数组对象,这一对象是一个由 begin和 end(不包括end)决定的原数组的浅拷贝。原始数组不会被改变。

str = arr.join(separator) 方法将一个数组(或一个类数组对象)的所有元素连接成一个字符串并返回这个字符串。

var newArray = arr.flat(depth) 方法会递归到指定深度将所有子数组连接,并返回一个新数组。
PS: 实验API;默认1层,转为一层参数为Infinity;还可用于移除空项;
arr.fill(value[, start[, end]]) 方法用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。不包括终止索引。

arr.toString() 返回一个字符串,表示指定的数组及其元素。 // expected output: “1,2,a,1a”

Array方法

Array.isArray(obj) 用于确定传递的值是否是一个 Array。
// 鲜为人知的事实:其实 Array.prototype 也是一个数组。
Array.isArray(Array.prototype);

Array.of(element0[, element1[, …[, elementN]]])

Array.from(arrayLike[, mapFn[, thisArg]]) 方法从一个类似数组或可迭代对象中创建一个新的数组实例。 方法创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型。

forEach

#### 如果数组在迭代时被修改了,则其他元素会被跳过。

1
2
3
4
5
6
7
8
9
10
var words = ["one", "two", "three", "four"];
words.forEach(function(word) {
console.log(word);
if (word === "two") {
words.shift();
}
});
// one
// two
// four

退出循环

PS: 根据定义,要退出循环就不能用该api
退出整个循环使用break会报错,使用return也不能跳出循环。
而是只用于跳过本次循环,而不是整个循环.使用some/every后则可以跳出整个循环

针对这个问题可以使用数组的另外两个方法some()与every():
some()当内部return true时跳出整个循环
every()当内部return false时跳出整个循环

其它:
throw,空跑循环,神奇改数组大法,最应该使用的every,骚年用for吧

#### JS跳出循环

  1. break
    说明:break语句会使运行的程序立刻退出包含在最内层的循环,或者退出一个switch语句。
    注意:由于它是用来退出循环或者switch语句,所以只有当它出现在这些语句时,这种形式的break语句才是合法的。

  2. continue
    说明: continue语句和break语句相似。所不同的是,它不是退出一个循环,而是开始循环的一次新迭代。
    注意: continue语句只能用在while语句、do/while语句、for语句、或者for/in语句的循环体内,在其它地方使用都会引起错误!

  3. return
    说明: return语句就是用于指定函数返回的值。 当执行return语句时,即使函数主体中还有其他语句,函数执行也会停止!
    注意:return语句只能出现在函数体内,出现在代码中的其他任何地方都会造成语法错误!

数组操作注意事项

1. 不要用 for_in 遍历数组
1. 不要用 JSON.parse(JSON.stringify()) 深拷贝数组
1. 不要用 arr.find 代替 arr.some
1. 不要用 arr.map 代替 arr.forEach

11:58

knowledge is no pay,reward is kindness
0%