ES6的一些数组对象的方法

ES6数组对象的新特性详解
本文介绍了ES6中的一些新特性,特别是针对数组对象的方法,包括:结构赋值、箭头函数、扩展运算符、Array.from、find、findIndex、includes、模板字符串、String的扩展方法(startsWith和endsWith)。此外,还提到了Set数据结构及其遍历方法,并讨论了解构赋值的规则和深拷贝的概念。
部署运行你感兴趣的模型镜像

ES6的一些新特性

ES6

  1. 数组结构赋值
 const [a,b]=[1,2]
  console.log(a,b)  //1,2
  1. 对象结构赋值
   var obj = {name:'zs,age:18}
       const {name,age}=obj
       console.log(name,age) // 'zs',18
  1. 箭头函数
    1. 箭头函数不绑定关键字,箭头函数中的this指向的是函数定义位置的上下文this
       var obj = {name:'mark'}
       function sum() {
       	console.log(this) //obj
       	return ()=>{
       	console.log(this) //obj
       	}
       };
       let res=sum.call(obj)
       res(); // obj
       ```
    
  2. 扩展运算符
       //合并数组
       let arr1 =[1,2,3]
       let arr2 = [4,5,6]
       let arr3 = [...arr1,...arr2] //[1,2,3,4,5,6]
       //另一种合并数组
       let arr3= arr1.push(...arr2)
       
       //将伪数组转化成真正的数组
       let divs = document.getElementsByTagName('div')
       const arr=[...divs]
       //2.用Array.from()方法将伪数组转换成数组
       var arrayLike={
       '0':'张三',
       '1':'李四',
       '2':'王五',
       'length':3
       }
       var ary = Array.from(arrayLike)  //
  1. Array.from方法
        var arrayLike={
       '0':'1',
       '1':'2',
       'length':2
       }
       //调用Array.from方法可以将伪数组转化成数组 第二参数回调函数可以进行数组遍历运算
       var arr = Array.from(arrayLike,item => item*2)
       console.log(arr)  // [2,4]
  1. 数组find方法 查找数组中第一个满足条件的值
       let ary =[{id:1,name:'张三'},{id:2,name:'张三'}];
       
       let arr2 = ary.find(item=>item.id==2);
       console.log(arr2) // {id:2,name:'张三'}
       如果查找不存在输出就是undefined
  1. findIndex()方法 用于找出第一个符合条件的数组成员的下标,如果没有就返回-1
       let ary = [1,5,10,15]
       let str = ary.findIndex(item=>item>5)
       console.log(str) //2
  1. includes方法 表示某个数组是否包含给定的值,返回布尔值
       let arr1 = [1,2,3]
       arr1.includes(2) // true
       arr1.includes(4)  //false
  1. 模板字符串
       let result ={
           name:'张三',
           age:20,
           sex:'男'
       }
       //模板字符串可以换行 嵌入变量 ${变量}
       let html = `<div> 
       	<span>${result.name}</span>
       	<span>${result.age}</span>
       	<span>${result.sex}</span>
       </div>`;
  1. String的扩展方法
    • 实例方法: startsWith() 和 endsWith()
    • startsWith():表示参数字符串是否在原字符串的头部,返回布尔值
    • endsWith():表示参数字符串是否在原字符串的尾部,返回布尔值
    let str = "Hello itheima !";
    let s1 = str.startsWith("H");
    console.log(s1); //true
    let s2 = str.endsWith("!");
    console.log(s2); //true

- 字符串 repeat方法 表示将原字符串重复n次 ,返回一个新字符串
      'hello'.repeat(2)  // 'hellohello'
  • set数据结构
    利用set数据结构进行数组去重
    const s2= new Set(['a','a','b',''b])
    connsole.log(s2.size)  //2 当数据重复会自动过滤
    const s3 = [...s2]
    console.log(s3)  //['a','b']
  • set数据结构 实例方法
      const s1= new Set() 
      //向set结构中添加值用add方法
      s1.add('a').add('b')
      console.log(s1.size) // 2
      
      //从set结构中删除值 delete 返回的是一个布尔值
      const s2 =s1.delete('b')
      console.log(s1) // 1
      console.log(s2) //true
      
      //判断某一个值是否是set数据结构中的成员 使用has
      const s3 = s1.has('a')
      console.log(s3) //true
      
      //清除set数据结构中的所有值
      s1.clear()
  • 遍历set 用forEach
      const s5 = new Set(['a','b','c'])
      s5.forEach(item =>{console.log(item)})
  • 所有代码执行 :同步> 回调>异步
  • 解构赋值
    1.等号两边格式保持一致
    2.解构的属性,必须属于右边的自身属性
    3.可以用等号给默认值 ,如果右边对象本身就有,就按具有的属性,如果没有 则按默认的来
    4.可以给属性取一个别名
     let obj ={
     	name:'heima',
     	age:10,
     	agel:30
     	
     }
     let {name:cName , agel = 20} = obj
     
     console.log(cName,agel)

深拷贝

  • 最常用的深拷贝方式
      let obj = {
      	name:'zs',
      	age:18
      }
      
      let newObj = JSON.parse(JSON.strinfy(obj))
let instance = new obj.constructor

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

<think>嗯,用户想用ES6语法在JavaScript中查找并替换数组对象中的元素。首先,我需要回忆一下ES6中处理数组方法。常用的方法有map、find、findIndex,还有展开运算符等等。 用户提到的是数组对象,所以每个元素都是对象,可能需要根据某个属性来查找。比如,用户可能有一个包含多个对象数组,每个对象id、name这样的属性,想要根据id找到特定对象并替换它。 首先,查找元素的位置。ES6中的findIndex方法可以返回符合条件的第一个元素的索引,这应该比ES5的indexOf更方便,尤其是处理对象数组时。例如,arr.findIndex(item => item.id === targetId)就能找到对应索引。 找到索引后,替换元素。可以用展开运算符来创建新数组,或者直接修改原数组。如果用户希望不改变原数组,而是返回新数组,可能需要使用map方法。比如,用arr.map(item => item.id === targetId ? newItem : item)来生成新数组,这样就替换了对应的元素。 另外,用户可能关心的是哪种方法更高效。如果是大型数组,findIndex加直接赋可能更快,因为map会遍历整个数组,而findIndex找到索引后只需修改一个元素。不过,如果数组很大但需要替换的元素在很后面的位置,两种方法差异可能不大。不过,使用map的代码更简洁,符合函数式编程的习惯。 还要考虑是否要修改原数组。splice方法会修改原数组,而map不会。用户的需求中是否允许修改原数组呢?如果用户希望不可变数据,应该使用map或slice加上展开运算符的方式。 可能还需要提到其他方法,比如使用Object.assign或展开运算符来创建新对象,避免直接修改原对象。例如,替换对象时,可以{...oldItem, property: newValue}来保持不可变性。 用户的问题可能涉及到深拷贝还是浅拷贝,如果对象的属性也是对象,可能需要更复杂的处理,但根据问题描述,可能只需要替换整个对象。 最后,总结几种方法:使用findIndex和splice修改原数组,使用map生成新数组,使用for...of循环遍历,虽然ES6但可能不如前两种方法简洁。同时,可以提到ES6的箭头函数和模板字符串使代码更简洁,但在这个问题中可能用不上模板字符串。 需要检查引用中的方法是否有适用的。引用[4]提到了findIndex,引用[5]提到了map,引用[2]提到了forEach,但forEach不会返回新数组,所以可能不太适合,除非用户想修改原数组的元素。比如,用forEach遍历并修改符合条件的元素,但这样会改变原数组,可能不符合不可变数据的要求。 所以,总结出三种方法:findIndex+splice、map新数组、forEach修改原数组。根据用户是否需要改变原数组来推荐不同的方法。同时,需要注意使用ES6语法,比如箭头函数、展开运算符等,让代码更简洁。</think>在JavaScript中使用ES6语法查找并替换数组对象中的元素,可以通过以下方法实现: --- ### **方法一:使用`map()`生成新数组** 通过遍历数组并返回新对象实现**不可变数据操作**,推荐用于需要保留原数组的场景 ```javascript const updatedArray = originalArray.map(item => item.id === targetId ? {...item, property: newValue} : item ); ``` --- ### **方法二:`findIndex()`+直接修改** 通过定位索引直接修改原数组,适合需要**原地替换**的场景 ```javascript const index = originalArray.findIndex(item => item.id === targetId); if (index !== -1) { originalArray[index] = {...originalArray[index], property: newValue}; } ``` --- ### **方法三:`for...of`循环(ES6迭代器)** 通过循环遍历实现更灵活的控制 ```javascript for (const [index, item] of originalArray.entries()) { if (item.id === targetId) { originalArray[index] = {...item, property: newValue}; break; // 找到后立即终止循环 } } ``` --- ### **关键点对比** | 方法 | 是否修改原数组 | 适用场景 | 性能 | |------------|----------------|------------------------|-----------| | `map()` | 否 | 不可变数据需求 | O(n) | | `findIndex`| 是 | 精确修改单个元素 | O(n)~O(1) | | `for...of` | 是 | 需要复杂条件或提前终止 | 取决于实现| --- ### **示例:替换用户对象** ```javascript const users = [ {id: 1, name: 'Alice'}, {id: 2, name: 'Bob'} ]; // 替换id=2的用户名 const newUsers = users.map(user => user.id === 2 ? {...user, name: 'Charlie'} : user ); ``` --- ### **扩展应用** - **深层对象替换**:使用递归或`JSON.parse(JSON.stringify())`实现深拷贝[^5] - **批量替换**:结合`filter()`筛选多个目标后统一处理[^4] - **性能优化**:对有序数组可改用二分查找提升定位效率[^2] ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值