JS数组
2020-03-12 本文已影响0人
zhenghongmo
基本用法
- Array(3)//{length:3} ,3表示length
- Array(3,3) // [3,3] ,第一个3并不表示length了
- 构造函数
- 基本类型==>Number、String、Boolean
- 不加new,返回基本类型
- 加new,返回对象
- 复杂类型==>Array、Function
- 不加new,返回对象
- 加new,也返回对象
Js中数组的本质
- 人类理解:数组就是数据的有序集合
- JS理解:数组就是原型链中有 Array.prototype 的对象
- 伪数组
- 有 0,1,2,3,4,5...n,length 这些 key 的对象
- 原型链中没有 Array.prototype
- 目前知道的伪数组有:
arguments 对象
document.querySelectAll('div') 返回的对象
数组的API
- Array.prototype.forEach
forEach() 方法对数组的每个元素执行一次提供的函数。返回值为undefined
forEach()参数必须为一个函数
函数必须有三个参数,一个为数组当前项的值(value),一个为数组当前项的索引(key),一个为数组对象本身
- for...of可以遍历数组,得到value
- Array.prototype.sort
sort() 方法对数组的元素进行排序,并返回数组。默认排序顺序是根据字符串Unicode码点。
<font color="red">sort()是这几个方法中唯一会改变原数组的方法</font>
sort()有一个函数作为参数,这是用来指定按某种顺序进行排列的函数。如果省略,元素按照转换为的字符串的各个字符的Unicode位点进行排序。
- Array.prototype.join
join() 方法将一个数组(或一个类数组对象)的所有元素连接成一个字符串并返回这个字符串。
- Array.prototype.concat
concat() 方法用于合并两个或多个数组。此方法不会更改现有数组,而是返回一个新数组.
- Array.prototype.toString
toString() 返回一个字符串,表示指定的数组及其元素。Array对象覆盖了Object的 toString 方法。对于数组对象,toString 方法连接数组并返回一个字符串,其中包含用逗号分隔的每个数组元素。
- Array.prototype.map
map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果
- Array.prototype.filter
filter() 方法创建一个新数组, 其包含通过所提供函数实现的测试的所有元素。
- Array.prototype.reduce
reduce() 方法对累计器和数组中的每个元素(从左到右)应用一个函数,将其简化为单个值。
- Array.prototype.push/Array.prototype.unshift()
- push() 方法将一个或多个元素添加到数组的末尾,并返回该数组的新长度。
- unshift()将一个或多个元素添加到数组的开头,并返回该数组的新长度。
- Array.prototype.pop/Array.prototype.shift()
- pop()方法从数组中删除最后一个元素,并返回该元素的值。此方法更改数组的长度。
- shift() 方法从数组中删除第一个元素,并返回该元素的值。此方法更改数组的长度。
- Array.prototype.includes()
- 用来判断一个数组是否包含一个指定的值,根据情况,如果包含则返回 true,否则返回false
- 第一个参数为需要查找的参数值,第二个参数(可选)表示从哪个位置开始查找,如果值为负数,则整个数组都会被搜索。
- Array.prototype.indexOf()
- 返回在数组中可以找到一个给定元素的第一个索引,如果存在,返回这个元素所在的位置;如果不存在,则返回-1.
- 相当于严格相等===去找是否存在某元素,例如两个对象值一样,但地址不一样,则不会被找到。
- Array.prototype.lastIndexOf()
- 返回指定元素(也即有效的 JavaScript 值或变量)在数组中的最后一个的索引,如果不存在则返回 -1。
- Array.prototype.find()
- 返回数组中满足提供的测试函数的第一个元素的值。否则返回 undefined。返回的是找到的值
- Array.prototype.findIndex()
- 返回数组中满足提供的测试函数的第一个元素的索引。否则返回-1。返回的是找到的值的位置。
- Array.prototype.some()
- 判断数组里是否有任意一个元素满足回调,找到了一个就不再往下执行。
- Array.prototype.every()
- 判断数组里是否所有元素都满足回调。
- Array.prototype.slice()
- 截取数组的一部分,如下[2,3)
- Array.prototype.splice()
- splice()方法通过删除现有元素和/或添加新元素来修改数组,返回被删除的内容。
合并两个数组
1、concat、for 循环、扩展运算法、Array.prototype.push.apply
- cancat 不改变原数组。concat合并数组之后,返回值才是新数组,并且可以合并两个及其以上的数组
let temparr2 = temparr.concat([7,8])
console.log(temparr2)//[ 1, 2, 3, 4, 7, 8 ]
- .push.apply合并数组是把后一个数组的值依次push进前一个数组,使前一个数组发生改变,并且只能两个数组之间发生合并。
arr1.push.apply(arr1,arr2)
console.log(arr1) //[ 1, 2, 3, 4, 4, 5, 6, 7 ]
- push 添加到数组的末尾(可以push一个值或者一个数组) 改变原数组
let temparr = [1,2,3,4];
temparr.push([6,7])
console.log(temparr)//[ 1, 2, 3, 4, [ 6, 7 ] ]
合并两个对象
Object.assign、扩展运算法、手写深浅拷贝
- Object.assign() 方法用于将所有可枚举属性的值从一个或多个源对象复制到目标对象。它将返回目标对象。
const o1 = { a: 1, b: 1, c: 1 };
const o2 = { b: 2, c: 2 };
const o3 = { c: 3 };
const obj = Object.assign( o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
console.log(o1); // { a: 1, b: 2, c: 3 }, 注意目标对象自身也会改变。