欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-11-18 10:33:16
数组的创建几种创建数组的方法 1. let a1 = new array(); 2. let a1 = array();//与第一种方式等价 3. let a1 = array.from(obj);...

数组的创建

几种创建数组的方法 
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;//数组末尾增加一个元素,值为undefined
colors[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);//3
numbers.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长度