(精华)2020年7月3日 JavaScript高级篇 ES6(数组的扩展方法)

举报
愚公搬代码 发表于 2021/10/18 23:49:16 2021/10/18
【摘要】 展开运算符 … 拆包 函数调用的体现 function f(a,b,c){} var args = [1,2,3] // f.apply(null,args) // 拆包 f(...args) 123...

展开运算符 … 拆包

函数调用的体现

function f(a,b,c){}
var args = [1,2,3]
// f.apply(null,args)
// 拆包
f(...args)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

后面可以放表达式

let a = 1;
const arr = [
    ...(a>0? ['a']: [])
]

  
 
  • 1
  • 2
  • 3
  • 4

替代函数的apply方法

 // 思考连接两个数组的方法
 let arr1 = [1,2,3]
 let arr2 = [4,5,6]
 console.log(arr1.concat(arr2));
 console.log(arr1);
 // es5 解决办法
 Array.prototype.push.apply(arr1,arr2);
 // es6 
 // (...arr1) += (...arr2)
 // 扩展运算符只有函数调用的时候才可以放在圆括号当中
 // (...[1,2])
 // console.log((...[1,2]));
 arr1.push(...arr2);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

复制数组

const a1 = [1,2]
const a2 = a1;// 复制
console.log(a1 === a2);// 指向同一个房间
// 浅克隆是长得一样 但是地址不一样
const a3 = a1.concat()// 浅拷贝
console.log(a3);
console.log(a1 === a3);// 没有指向同一个房间 

const a4 = [...a1]
console.log(a4);
console.log(a4 === a1);// 浅拷贝
// 展开运算符是浅拷贝 而不是 深拷贝

let arr = [{a:1},2,3]
// let arr1 = [...arr] // 是深拷贝嘛?
// arr1[0].a = 2
// // 如果此时arr[0].a = 2 说明是浅拷贝 不等于2 说明是深拷贝
// console.log(arr); 
// 深拷贝 除了递归能实现
let arr2 = JSON.parse(JSON.stringify(arr))
arr2[0].a = 2;
// 如果此时arr[0].a = 2 说明是浅拷贝 不等于2 说明是深拷贝
console.log(arr);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

在这里插入图片描述

…打包

// const [first,...arr] = [1,2,3,4,5]
// console.log(arr);
// const [o,...s] = [];
// console.log(o) // undefined
// console.log(s) // []
// 只能放在参数的最后一位
// const [...arr,first] = [1,2,3,4,5]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

Array.from()

// Array.from() 用于把类数组对象转化成真正的数组
// 部署了 iterator 接口 都可以用Array.from()转化成真正的数组
// 有 length属性 没有数组操作的一些方法 push
function get(a,b,c){
    console.log(arguments);
    console.log(Array.from(arguments));
}
get(1,2,3)

const copyArr = {
    '0':'a',
    '1':'b',
    length:2
}
console.log(Array.from(copyArr));

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

Array.of()

// 可以将一组值转化成数组
console.log(Array.of(2,3,4,5));
// ? 弥补数组构造函数的一些不足
console.log(Array(3).length);
// 当参数不少于2个时候 
console.log(Array(1,2,3));
console.log(Array.of(3));

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

copyWithin()

// copyWithin()
// 1 必须要传的 从该位置开始替换数据
// 2 start 从该位置读取数据 默认是0
// 3 end
console.log([1,2,3,4,5].copyWithin(0,3)); // [4,5,3,4,5]

  
 
  • 1
  • 2
  • 3
  • 4
  • 5

find() ,findIndex()

let arr = [1,2,3,-1,-2,45]
let res = arr.find(function(i){
    return i<0
})
console.log(res);
let resIndex = arr.findIndex(function(i){
    return i<0
})
console.log(resIndex)

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

文章来源: codeboy.blog.csdn.net,作者:愚公搬代码,版权归原作者所有,如需转载,请联系作者。

原文链接:codeboy.blog.csdn.net/article/details/107115411

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。