js往数组中添加元素添加方法(js给数组对象添加一个对象)

数组的创建

几种创建数组的方法 1. let a1 = new Array(); 2. let a1 = Array();//与第一种方式等价 3. let a1 = Array.from(obj); //ES6 4. let a1 = Array.of(); //ES6

1,2两种方法创建数组,如果传入的参数是数字,表示新创建的数组的长度,而不是数组的元素。of方法解决1,2两种方法的歧义,数字代表的是数组的元素。
Array.from方法用于将类数组结构转换为数组实例,Array.of方法用于将一组参数转换为数组实例。

Array.from()第一个参数是一个可迭代的类数组对象,或者有一个length属性的可索引元素结构。

Array.from("Polo"); //['P', 'o', 'l', 'o']const m = new Map().set(1,2).set(3,4);const s = new Set().add(1).add(2).add(3).add(4);Array.from(m); //[[1,2],[3,4]]Array.from(s); //[1,2,3,4]

Array.from()可接收第二个可选映射函数参数,这个函数可以直接增强新数组的值,也就是说可以对第一个参数里的值做处理,新建数组的值为经过第二个参数函数加工的值。

const a2 = Array.from([1,2,3,4], x => x * 2); //[2,4,6,8]

Array.from()还可以接收第三个可选参数,用于指定映射函数中this的值,但这个重写的this值在箭头函数中不适用。

const a3 = Array.from([1,2,3,4],function(x){return x**this.exponent},{exponent:2}); //[1,4,9,16]

数组length属性
数组的length属性不是只读的,通过修改length属性,可以从数组末尾删除或添加元素。

let colors = ['red', 'blue', 'green'];colors.length=4;//数组末尾增加一个元素,值为undefinedcolors[99] = 'black';//数组长度变为100,3-98位置的元素值为undefined

检查是否为数组
ES6之前的版本,检查数组用各类方式,各有各的道理,也有各自的问题。ES6提供了Array.isArray方法,确定一个值是否为数组。

if (Array.isArray(value)) {    //操作数组}

数组迭代方法

1. keys() //返回数组索引的迭代器2. values() //返回数组元素的迭代器3. entries() //返回索引/值对的迭代器4. for(const [index,element] of a.entries()) //ES6解构语法在循环中拆分键值对

复制和填充
Array.copyWithin(): 按照指定范围浅复制数组中的部分内容,然后将他们插入到指定索引开始的位置。第1个参数表示插入位置的索引,第2个可选参数表示开始复制的索引位置。

let ints;reset = () => ints = [0,1,2,3,4,5,6,7,8,9];reset();ints.copyWithin(5); //[0,1,2,3,4,0,1,2,3,4]reset();ints.copyWithin(0,5); [5,6,7,8,9,5,6,7,8,9]reset();ints.copyWithin(4,0,3); //[0,1,2,3,0,1,2,7,8,9]

Array.fill():第1个参数,表示用于填充的元素,第2个可选参数,表示填充的开始位置,第3个可选参数,表示填充的结束位置。fill()静默忽略超出数组边界,零长度及方向相反的索引范围。

const zeroes = [0, 0, 0, 0, 0];zeroes.fill(5); //[5,5,5,5,5];zeroes.fill(0);zeroes.fill(7,3); //[0,0,0,7,7]zeroes.fill(0);zeroes.fill(7,1,3); //[0,7,7,0,0]

数组排序方法

reverse(): 将数组元素反向排列
sort():按升序排列数组元素,sort()会在每一项上调用String()转型函数,然后比较字符串来决定顺序。sort()方法可以接收一个比较函数。用于判断哪个值应该排在前面。

let values = [0,1,5,10,15];values.reverse(); //[15,10,5,1,0]values.sort(); //[0,1,10,15,5]values.sort((x,y) => x - y); //[0,1,5,10,15]

迭代方法

every():对数组每一项都运行传入的函数,如果每一项都返回true,则这个方法返回true。
some():对数组每一项都运行传入的函数,如果有一项函数返回true,则这个方法返回true。
filter():对数组每一项都运行传入的函数,函数返回true的项会组成之后的返回。
map(): 对数组每一项都运行输入的函数,返回由每次函数调用的结果构成的数组。
forEach():对数组每一项都运行传入的函数,没有返回值。

let numbers = [1,2,3,4,5,6];numbers.filter((item,index,array) => item > 2); //[3,4,5,6]numbers.map((item,index,array) => item * 2); //[2,4,6,8,10,12]numbers.forEach((item,index,array) => {  //执行某些操作});

归并方法

reduce():从数组第一项开始遍历到最后一项。
reduceRight():从最后一项开始遍历至第一项。

let values = [1,2,3,4,5];let sum = values.reduce((prev,cur,index,array) => prev +cur); //15

数组其他方法

concat(): 在现有数组全部元素基础上创建一个新数组
slice():创建一个包含原有数组中一个或多个元素的新数组。
splice():在数组中插入(删除、替换)元素。第1个参数,操作的位置,第2个参数,要删除的元素个数,后面的n个参数,插入到数组中的元素。
indexOf():查找元素所在的索引位置。
lastIndexOf(): 和indexOf方法类似,区别是从后往前找。
includes():判断是否包含元素。

let color = ['red','green','blue'];let color2 = colors.concat('yellow',['black','brown']);//['red','green','blue','yellow','black','brown']let color3 = colors.slice(1); //['green','blue']let color3 = colors.slice(1,2); //['green']let removed = colors.splice(0,1); // removed = red; colors = ['green','blue']colors.splice(1,0,'yellow','orange'); //在第一个位置插入两个元素 ['green',blue','yellow','orange']let numbers = [1,2,3,4,5,6,7,8,9];numbers.indexOf(4);//3numbers.includes(5);//true

Map:

ES6新增的集合类型,可以给Map构造函数传入一个可迭代对象,需要包含键/值对数组。Map可以使用任何javascript数据类型作为键。map的值类型也是没有限制的。Map实例会维护键值对的插入顺序,可以根据插入顺序执行迭代操作。

API:
has(key) :判断键是否存在。
set(key,value):设置键值对。
get(key):根据key获取对应的值。
delete(key):删除键值对。
clear():清除这个map。
size属性:获取map的长度。

Map与Object比较:

内存占用:不同浏览器情况不同,但给定固定大小的内存,Map可以存更多的键值对
插入性能:插入Map一般会稍快。
查找速度:如果只包含少量键值对,Object速度更快,如果代码涉及大量查找操作,某些情况下选Object可能更好
删除速度:Map的delete()操作性能更优
综上所述,一般情况下使用Map代替Object做键值操作是更明智的选择

WeakMap:

与Map类似的数据 结构,主要应对垃圾回收优化操作,它不会阻止垃圾回收操作。WeakMap不可迭代键,也不能clear()整个数据。它非常适合保存关联元数据,比如dom树种的一个元素,作为WeakMap的key,当dom元素被删除是,WeakMap对应的值被销毁。如果把dom元素做为Map的key,则不会释放dom元素,造成内存浪费。这是WeakMap中Weak的正解。

Set:

集合,存储不重复的值。Set会维护插入是的顺序,因此支持顺序迭代。

API:
add():增加值。
has():判断是否包含值。
delete():删除值
size属性:Set长度

原创文章,作者:admin,如若转载,请注明出处:https://www.qq65hfghe5.com/tg/79975.html