const obj1 = [{id: 1,name: ‘zhangsan’},{id: 2,name: ‘lisi’}]
Array.from(obj1,(el) => {
return el.id
})
from() 的 length 属性为 1 ,即 Array.from.length === 1。
数组去重合并
function combine(){
let arr = [].concat.apply([], arguments); //没有去重复的新数组
return Array.from(new Set(arr));
}
var m = [1, 2, 2], n = [2,3,3];
console.log(combine(m,n)); // [1, 2, 3]
Array.of()
Array.of() 方法创建一个具有可变数量参数的新数组实例,而不考虑参数的数量或类型。
Array.of() 和 Array 构造函数之间的区别在于处理整数参数:Array.of(7) 创建一个具有单个元素 7 的数组,而 Array(7) 创建一个长度为7的空数组
(注意:这是指一个有7个空位(empty)的数组,而不是由7个undefined组成的数组)。
Array.of() // []
Array.of(undefined) // [undefined]
Array.of(null) // [null]
Array.of(NaN) // [NaN]
Array.of(1) // [1]
Array.of(1, 2) // [1, 2]
Array.of([1,2,3]) // [[1,2,3]]
Array.of({id: 1},{id: 2}) // [{id:1}, {id:2}]
===================================================================
push()
push()
方法将一个或多个元素添加到数组的末尾。此方法更改原数组
返回值该数组的新长度
let arr=[1,2,3]
console.log(arr.push(2,1)) //5
console.log(arr) //[ 1, 2, 3, 2, 1 ]
pop()
pop()
方法从数组中删除最后一个元素,并返回该元素的值。此方法更改原数组
返回值删除的元素
let arr=[1,2,3]
console.log(arr.pop()) //3
console.log(arr) //[ 1, 2]
shift()
shift() 方法
从数组中删除第一个元素,并返回该元素的值。此方法更改原数组
返回值删除的元素
let arr=[1,2,3]
console.log(arr.shift()) //1
console.log(arr) //[ 2, 3 ]
unshift()
unshift()
方法将一个或多个元素添加到数组的开头,并返回该数组的新长度此方法更改原数组
返回值该数组的新长度
let arr=[1,2,3]
console.log(arr.unshift(2,1)) //5
console.log(arr) //[ 2, 1, 1, 2, 3 ]
concat()
concat()
方法用于合并两个或多个数组。此方法不会更改现有数组
,而是返回一个新数组
。如果省略参数
,则concat会返回当前数组的浅拷贝
。
返回值合并后的新数组
//都是简单数据类型 可以当作 深拷贝
let arr=[1,2,3]
let newArr=arr.concat()
console.log(newArr===arr) //false
//有复杂数据类型 浅拷贝
let arr1=[1,2,{a:1}]
let newArr1=arr1.concat()
console.log(newArr1=arr1) //[ 1, 2, { a: 1 } ]
arr1[2].b=2
console.log(newArr1) //[ 1, 2, { a: 1, b: 2 } ]
//综上 省略参数 返回当前数组的浅拷贝
let obj1={a:1}
let obj2={b:2}
let arr = [1, 2, 3,obj1]
let newArr = arr.concat([1,2],obj2,100-1,‘合并数组’,undefined,null)
//数据类型如字符串,数字和布尔(不是String,Number 和 Boolean 对象):
//concat将字符串和数字的值复制到新数组中。
console.log(newArr)
[1,2,3,{ a: 1 },1,2,{ b: 2 },99,‘合并数组’, undefined,null]
obj1.b=3
obj2.a=4
/*
对象引用(而不是实际对象):concat将对象引用复制到新数组中。
原始数组和新数组都引用相同的对象。
也就是说,如果引用的对象被修改,则更改对于新数组和原始数组都是可见的。
这包括也是数组的数组参数的元素。
*/
console.log(newArr)
[1,2,3,{ a: 1, b: 3 },1,2,{ b: 2, a: 4 },99,‘合并数组’,undefined,null]
- 详解
concat方法创建一个新的数组,它由被调用的对象中的元素组成,每个参数的顺序依次是该参数的元素(如果参数是数组)或参数本身(如果参数不是数组)。它不会递归到嵌套数组参数中。
concat方法不会改变this或任何作为参数提供的数组,而是返回一个浅拷贝,它包含与原始数组相结合的相同元素的副本。 原始数组的元素将复制到新数组中,如下所示:
-
对象引用(而不是实际对象):concat将对象引用复制到新数组中。 原始数组和新数组都引用相同的对象。 也就是说,
如果引用的对象被修改,则更改对于新数组和原始数组都是可见的。 这包括也是数组的数组参数的元素。
-
数据类型如字符串,数字和布尔(不是String,Number 和 Boolean 对象):
concat将字符串和数字的值复制到新数组中
。
slice()
slice()
方法返回一个新的数组对象
,这一对象是一个由 begin 和 end 决定的原数组的浅拷贝(包括 begin,不包括end)
。原始数组不会被改变
。
返回值新的数组对象
参数 slice(begin,end)
第一个参数 begin
-
提取起始处的索引(从 0 开始),从该索引开始提取原数组元素。
-
如果该参数为负数,则表示从原数组中的倒数第几个元素开始提取,slice(-2) 表示提取原数组中的倒数第二个元素到最后一个元素(包含最后一个元素)。
-
如果省略 begin,则 slice 从索引 0 开始。
-
如果 begin 大于原数组的长度,则会返回空数组。
第二个参数 end
-
提取终止处的索引(从 0 开始),在该索引处结束提取原数组元素。slice 会提取原数组中索引从 begin 到 end 的所有元素(包含 begin,但不包含 end)。
-
slice(1,4) 会提取原数组中从第二个元素开始一直到第四个元素的所有元素 (索引为 1, 2, 3的元素)。
-
如果该参数为负数, 则它表示在原数组中的倒数第几个元素结束抽取。 slice(-2,-1) 表示抽取了原数组 中的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)。
-
如果 end 被省略,则 slice 会一直提取到原数组末尾。
如果 end 大于数组的长度,slice 也会一直提取到原数组末尾。
let arr=[1,2,3,4,5]
//begin 参数
//1.
//如果省略 begin,则 slice 从索引 0 开始。
let newArr1=arr.slice()
console.log(newArr1) //[ 1, 2, 3, 4, 5 ]
//2.
//提取起始处的索引(从 0 开始),从该索引开始提取原数组元素
//如果 end 被省略,则 slice 会一直提取到原数组末尾。
let newArr2=arr.slice(1) //[ 2, 3, 4, 5 ]
console.log(newArr2)
//3.
//如果 begin 大于原数组的长度,则会返回空数组。
let newArr3=arr.slice(6)
console.log(newArr3) //[]
//4.
//如果该参数为负数,则表示从原数组中的倒数第几个元素开始提取
//slice(-2) 表示提取原数组中的倒数第二个元素到最后一个元素(包含最后一个元素)
let newArr4=arr.slice(-2)
console.log(newArr4) //[ 4, 5 ]
//end 参数
//1.
// 提取终止处的索引(从 0 开始),
// 在该索引处结束提取原数组元素。
// slice 会提取原数组中索引从 begin 到 end 的所有元素(包含 begin,但不包含 end)。
let newArr5=arr.slice(1,2)
console.log(newArr5) //[ 2 ]
//2.
// 如果该参数为负数, 则它表示在原数组中的倒数第几个元素结束抽取。
// slice(-2,-1) 表示抽取了原数组中的倒数第二个元素到最后一个元素(不包含最后一个元素,也就是只有倒数第二个元素)。
let newArr6=arr.slice(-2,-1)
console.log(newArr6) //[ 4 ]
//3.
// 如果 end 被省略,则 slice 会一直提取到原数组末尾。
// 如果 end 大于数组的长度,slice 也会一直提取到原数组末尾。
let newArr7=arr.slice(1)
let newArr8=arr.slice(1,6)
console.log(newArr7) //[ 2, 3, 4, 5 ]
console.log(newArr8) //[ 2, 3, 4, 5 ]
//补充 如果某元素是 对象引用 若该对象改变 新数组和原来数组的该元素也会改变
let obj={a:1}
let arr1=[1,2,obj]
let newArr = arr1.slice()
console.log(arr1,newArr) //arr [ 1, 2, { a: 1 } ] newArr [ 1, 2, { a: 1 } ]
obj.b=2
console.log(arr1,newArr) //arr [ 1, 2, { a: 1, b: 2 } ] newArr [ 1, 2, { a: 1, b: 2 } ]
- 详解
slice 不会修改原数组,只会返回一个浅复制了原数组中的元素的一个新数组
。原数组的元素会按照下述规则拷贝:
-
如果该元素是个对象引用 (不是实际的对象)
,slice 会拷贝这个对象引用到新的数组里。两个对象引用都引用了同一个对象。如果被引用的对象发生改变,则新的和原来的数组中的这个元素也会发生改变
。 -
对于
字符串、数字及布尔值来说
(不是 String、Number 或者 Boolean 对象),slice 会拷贝这些值到新的数组里。在别的数组里修改这些字符串或数字或是布尔值,将不会影响另一个数组
。
如果向两个数组任一中添加了新元素,则另一个不会受到影响。
splice()
splice()
方法通过删除或替换现有元素或者原地添加新的元素来修改数组
,并以数组形式返回被修改的内容
。此方法会改变原数组
。
返回值被删除元素组成的新的数组对象
由被删除的元素组成的一个数组。如果只删除了一个元素,则返回只包含一个元素的数组。如果没有删除元素,则返回空数组。
参数 array.splice(start[, deleteCount[, item1[, item2[, …]]]])
start
-
指定修改的开始位置(从0计数)。
-
如果超出了数组的长度,则从数组末尾开始添加内容;
-
如果是负值,则表示从数组末位开始的第几位(从-1计数,这意味着-n是倒数第n个元素并且等价于array.length-n);
-
如果负数的绝对值大于数组的长度,则表示开始位置为第0位。
deleteCount 可选
-
整数,表示要移除的数组元素的个数。
-
如果 deleteCount 大于 start 之后的元素的总数,则从 start 后面的元素都将被删除(含第 start 位)。
-
如果 deleteCount 被省略了,或者它的值大于等于array.length - start(也就是说,如果它大于或者等于start之后的所有元素的数量),那么start之后数组的所有元素都会被删除。
-
如果 deleteCount 是 0 或者负数,则不移除元素。这种情况下,至少应添加一个新元素。
item1, item2, … 可选
- 要添加进数组的元素,从start 位置开始。如果不指定,则 splice() 将只删除数组元素。
//start 参数
//1.指定修改的开始位置(从0计数)。
//只有 start 参数 从开始位置删除到数组末尾
let arr1=[1,2,3,4,5]
let newArr1=arr1.splice(2)
console.log(arr1) //改变原数组 [ 1, 2 ]
console.log(newArr1) //返回值 删除的元素组成的数组 [ 3, 4, 5 ]
//2.若省略start参数 返回 空数组[]
let arr2=[1,2,3,4,5]
let newArr2=arr2.splice()
console.log(arr2) // [ 1, 2, 3, 4, 5 ]
console.log(newArr2) //返回值 未删除元素返回空数组 []
//3.如果超出了数组的长度,则从数组末尾开始添加内容
let arr3=[1,2,3,4,5]
let newArr3=arr3.splice(10,0,1)
console.log(arr3) // [ 1, 2, 3, 4, 5, 1 ]
console.log(newArr3) //返回值 []
//4.如果是负值,则表示从数组末位开始的第几位
//(从-1计数,这意味着-n是倒数第n个元素并且等价于array.length-n)
let arr4=[1,2,3,4,5]
let newArr4=arr4.splice(-2)
console.log(arr4) // [ 1, 2, 3 ]
console.log(newArr4) //返回值 [ 4, 5 ]
//5.如果负数的绝对值大于数组的长度,则表示开始位置为第0位。
let arr5=[1,2,3,4,5]
let newArr5=arr5.splice(-6)
console.log(arr5) // []
console.log(newArr5) //返回值 [ 1, 2, 3, 4, 5 ]
//deleteCount 参数 可选
//1.整数,表示要移除的数组元素的个数。
let arr6=[1,2,3,4,5]
let newArr6=arr6.splice(1,2)
console.log(arr6) // [ 1, 4, 5 ]
console.log(newArr6) //返回值 [ 2, 3 ]
//2.如果 deleteCount 大于 start 之后的元素的总数,则从 start 后面的元素都将被删除(含第 start 位)。
let arr7=[1,2,3,4,5]
let newArr7=arr7.splice(1,10)
console.log(arr7) // [ 1 ]
console.log(newArr7) //返回值 [ 2, 3, 4, 5 ]
//3.如果 deleteCount 被省略了,或者它的值大于等于array.length - start
//(也就是说,如果它大于或者等于start之后的所有元素的数量),那么start之后数组的所有元素都会被删除。
let arr8=[1,2,3,4,5]
let newArr8=arr8.splice(1,5)
console.log(arr8) // [ 1 ]
console.log(newArr8) //返回值 [ 2, 3, 4, 5 ]
let arr9=[1,2,3,4,5]
let newArr9=arr9.splice(1)
console.log(arr9) // [ 1 ]
console.log(newArr9) //返回值 [ 2, 3, 4, 5 ]
//4.如果 deleteCount 是 0 或者负数,则不移除元素。这种情况下,至少应添加一个新元素。
let arr10=[1,2,3,4,5]
let newArr10=arr10.splice(1,-1,100)
console.log(arr10) // [ 1, 100, 2, 3, 4, 5 ]
console.log(newArr10) //返回值 []
// item1, item2, … 参数 可选
// 要添加进数组的元素,从start 位置开始。如果不指定,则 splice() 将只删除数组元素。
let arr11=[1,2,3,4,5]
let newArr11=arr11.splice(3,0,100,101,102)
console.log(arr11) // [ 1, 2, 3, 100,101,102, 4, 5 ]
console.log(newArr11) //返回值 []
补充
- 由被删除的元素组成的一个数组。如果只删除了一个元素,则返回只包含一个元素的数组。如果没有删除元素,则返回空数组。
copyWithin()
copyWithin()
方法浅复制数组的一部分到同一数组中的另一个位置
在数组内部替换自身元素,并返回它,不会改变原数组的长度,改变原数组
。
返回值 改变后的数组
参数 arr.copyWithin(target[, start[, end]])
target
-
0 为基底的索引,复制序列到该位置。如果是负数,target 将从末尾开始计算。
-
如果 target 大于等于 arr.length,将会不发生拷贝。如果 target 在 start 之后,复制的序列将被修改以符合 arr.length。
start
-
0 为基底的索引,开始复制元素的起始位置。如果是负数,start 将从末尾开始计算。
-
如果 start 被忽略,copyWithin 将会从0开始复制。
end
-
0 为基底的索引,开始复制元素的结束位置。copyWithin 将会拷贝到该位置,但不包括 end 这个位置的元素。如果是负数, end 将从末尾开始计算。
-
如果 end 被忽略,copyWithin 方法将会一直复制至数组结尾(默认为 arr.length)。
返回值
//1.
//target 参数 从0开始 复制序列到该位置
//start 参数 默认为0
//end 参数 默认 复制至数组结尾(默认为 arr.length)
let arr1=[1,2,3,4,5]
let newArr1=arr1.copyWithin(2)
//从索引2开始替换 从索引0到数组结尾复制数据
console.log(arr1) //改变原数组 [ 1, 2, 1, 2, 3 ]
console.log(newArr1) //返回改变后的数组 [ 1, 2, 1, 2, 3 ]
//2.
//target 可以是 负数
let arr2=[1,2,3,4,5]
let newArr2=arr2.copyWithin(-2)
//从倒数第二个元素开始替换 从索引0到数组结尾复制数据
console.log(arr2) //改变原数组 [ 1, 2, 3, 1, 2 ]
console.log(newArr2) //返回改变后的数组 [ 1, 2, 3, 1, 2 ]
//3.
//start参数 0 为基底的索引,开始复制元素的起始位置。如果是负数,start 将从末尾开始计算。
//end参数 0 为基底的索引,开始复制元素的结束位置。copyWithin 将会拷贝到该位置,但不包括 end 这个位置的元素。
//如果是负数, end 将从末尾开始计算。
let arr3=[1,2,3,4,5]
let newArr3=arr3.copyWithin(1,-3,-1)
//从索引为1开始替换 从倒数第三个元素到最后一个元素复制数据
console.log(arr3) //改变原数组 [ 1, 3, 4, 4, 5 ]
console.log(newArr3) //返回改变后的数组 [ 1, 3, 4, 4, 5 ]
详解
参数 target、start 和 end 必须为整数。
如果 start 为负,则其指定的索引位置等同于 length+start,length 为数组的长度。end 也是如此。
copyWithin 方法不要求其 this 值必须是一个数组对象;除此之外,copyWithin 是一个可变方法,它可以改变 this 对象本身,并且返回它,而不仅仅是它的拷贝。
copyWithin 就像 C 和 C++ 的 memcpy 函数一样,且它是用来移动 Array 或者 TypedArray 数据的一个高性能的方法。复制以及粘贴序列这两者是为一体的操作;即使复制和粘贴区域重叠,粘贴的序列也会有拷贝来的值。
copyWithin 函数被设计为通用式的,其不要求其 this 值必须是一个数组对象。
copyWithin 是一个可变方法,它不会改变 this 的长度 length,但是会改变 this 本身的内容,且需要时会创建新的属性。
fill()
**fill()
方法用一个固定值填充一个数组中从起始索引到终止索引内的全部元素。不包括终止索引
。
改变原数组
**
返回值修改后的数组
参数 arr.fill(value[, start[, end]])
value
用来填充数组元素的值。
start 可选
起始索引,默认值为0。
end 可选
终止索引,默认值为 this.length。
//value 填充数组
//start 起始索引 默认值0 可以负值 表示从后往前数第n个
//end 终止索引 默认值 this.length 不包括该位置 可以负值 表示从后往前数第n个
//1.
//只有value 参数
let arr1=[1,2,3,4,5]
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
最后
文章到这里就结束了,如果觉得对你有帮助可以点个赞哦
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
rt 可选**
起始索引,默认值为0。
end 可选
终止索引,默认值为 this.length。
//value 填充数组
//start 起始索引 默认值0 可以负值 表示从后往前数第n个
//end 终止索引 默认值 this.length 不包括该位置 可以负值 表示从后往前数第n个
//1.
//只有value 参数
let arr1=[1,2,3,4,5]
小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Web前端开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-FIWUDLFs-1710685805768)]
[外链图片转存中…(img-WeibHqkr-1710685805769)]
[外链图片转存中…(img-DU14tX2Z-1710685805769)]
[外链图片转存中…(img-G3QYbsKJ-1710685805770)]
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注:前端)
[外链图片转存中…(img-AEIMOA9i-1710685805770)]
最后
文章到这里就结束了,如果觉得对你有帮助可以点个赞哦
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】
[外链图片转存中…(img-LxgCGw4M-1710685805770)]