哪些常用的数组和对象的方法

230 阅读5分钟
  • Object.defineProperty()

    • 出现 ... 的中都是数据劫持

    • Vue 就是使用 Object.defineProperty 数据劫持 ,从而实现双向数据绑定

    • 数据劫持的对象不能直接改变原对象的值,仅能通过 set 函数更改原始对象的值,才能发生变化

Object.defineProperty(_this, kesy, {
    value: xxx
    // get: 获取扩展属性值, 当获取该属性的时候调用 get 方法
    get(){
    	return xxx
	}
	// set: 监听扩展属性,只要修改就会被调用
	set(newValue){
        // _this.username = newValue 千万不要在 set 方法中修改当前的属性值,会出现死循环
        data[item] = newValue
    }
})

对象

Object.defineProperty()

  • 作用

    该方法会直接在指定的对象上定义一个新属性,或者修改一个对象的现有属性。通过这个方法添加或修改的属性默认是无法修改的

  • 语法

    Object.defineProperty(obj, key, descriptor)

  • 参数

    • obj 定义属性的对象

    • key 要定义或修改的属性名称

    • descriptor 定义或修改属性的描述

      • descriptor 参数说明

        {
        	configurable: true // 该属性可以被改变或删除 默认 false
        	enumerable: ture // 该属性可以被枚举 默认false
        	value: Number | Object | function 该属性的对应值 默认 undifned
        	get: () => {
        		return undifned // 当访问该属性的时会调用该函数,显示值为 return 的值
        	}
        	set: setValue => {
        		// key 被修改时会调用这个函数, 接收一个参数(也就是被赋予的新值)
        	}
        }
        
  • 返回值

    定义后的对象

Object.keys()

  • 作用

    将对象所有键以数组的形式返回

  • 语法

    Object.keys(obj)

  • 参数

    obj 要返回枚举 key 的对象

  • 返回值

    一个表示给定对象的所有可枚举属性的字符串数组

数组

const players = [
    { name: '科比', num: 24 },
    { name: '詹姆斯', num: 23 },
    { name: '保罗', num: 3 },
    { name: '威少', num: 0 },
    { name: '杜兰特', num: 35 }
]

数组遍历方法

forEach
  • 作用

    • 遍历数组各项
  • 语法

    players.forEach((item,index,arr) => {
        console.log(item,index)
    })
    // {name: "科比", num: 24} 0
    // {name: "詹姆斯", num: 23} 1
    // {name: "保罗", num: 3} 2
    // {name: "威少", num: 0} 3
    // {name: "杜兰特", num: 35} 4
    
    
  • 参数

    • item 当前被遍历的项
    • index 当前被遍历项的下标
    • arr 数组本身
  • 返回值

    • null
map()
  • 作用: 数组映射

  • 语法

    let result = players.map( (item,index,arr)=> {
    	return `${item.name}-----${item.num}` 
    } )
    console.log(result)
    // ["科比-----24", "詹姆斯-----23", "保罗-----3", "威少-----0", "杜兰特-----35"]
    
  • 参数

    • item 当前被遍历的项
    • index 当前被遍历项的下标
    • arr 数组对象
  • 返回值

    • 返回映射后的数组的,该方法不会改变原数组
every()
  • 作用: 检测数组全部元素通过条件

  • 语法

    let result = players.every((item,index,arr) => {
    	return item.num > 2
    })
    console.log(result)
    // false
    let result1 = players.every((item,index,arr) => {
    	return item.num >= 0
    })
    console.log(result1)
    // true 
    
  • 参数

    • item 当前被遍历的项
    • index 当前被遍历项的下标
    • arr 数组对象
  • 返回值

    • 检测结果 true || false
some()
  • 作用: 与 every() 大体相同, some() 检查数组中的元素至少有一个元素通过测试。

  • 语法

    const result = players.some((item,index,arr) => {
    	return item.name === '科比' 
    })
    console.log(result) 
    // true
    
  • 参数

    • item 当前被遍历的项
    • index 当前被遍历项的下标
    • arr 数组对象
  • 返回值

    • 测试结果,true || false
reduce()
  • 作用: 将执行结果汇总作为单个值返回
  • 参数
    • callback 执行的回调函数
      • total 累积值
      • item 当前被遍历的项
      • index 当前被遍历项的下标
      • arr 数组对象
    • initTotal 初始值 初始值可以根据应用场景切换任意值类型 对象 数组 ……
  • 语法
let result = players.reduce((total,item,index) => {
	return total + item.num
},0)
console.log(result)
// 85
findIndex()
  • 作用: 查找符合要求的元素下标
  • 参数
    • item 当前被遍历的项
    • index 当前被遍历项的下标
    • arr 数组对象
  • 语法
let result = players.findIndex((item,index,arr) => {
    return item.name === '科比'
})
console.log(result)
// 0
  • 返回值 :返回第一个符合条件元素的下标,找到符合条件就结束循环。没有找到返回 -1
find()
  • 作用: 查找符合要求的元素
  • 参数
    • item 当前被遍历的项
    • index 当前被遍历项的下标
    • arr 数组对象
  • 语法
let result = players.find((item,index,arr) => {
    return item.name === '科比'
})
console.log(result)
// {name: "科比", num: 24}
  • 返回值 :返回第一个符合条件元素,找到符合条件就结束循环。没有找到返回 undefined

数组操作元素方法

定义一个默认数组

let array = [1,2,3,4]
splice()
  • 作用

    splice() 方法可以删除或替换数组元素,会改变原数组

  • 语法

    array.splice(0, 1,'新加入的值1','新加入的值2')
    console.log(array)
    // ["新加入的值1", "新加入的值2", 2, 3, 4]
    
  • 参数

    • satrt 指定修改的开始值(从 0 计数)如果是负数则表示从数组末尾的第几位开始
    • deleteCount 可选参数 需要删除的元素个数 包括 start
    • item1, item2, …… 可选参数 要添加的元素
  • 返回值

    由被删除的元素组成的一个数组,删除一个元素,则返回只包含一个元素的数组。没有删除返回空数组

fill()
  • 作用

    fill() 填充数组, 会改变原数组

  • 语法

    array.fill('填充的数11',0,2)
    console.log(array) // ['填充的数11', '填充的数11', 3, 4]
    
  • 参数

    • fillValue : 填充的值
    • satrtIndex可选参数 开始填充的索引值 默认 0
    • endIndex可选参数 结束填充的索引(不包括该索引) 默认 -1
  • 返回值

    返回填充后的数组

includes()
  • 作用

    includes() 查询数组中是否有某个元素

  • 语法

    let result = array.includes(2,0)
    console.log(result) // true
    
  • 参数

    • findValue 查询的元素
    • startIndex 可选参数 从 startIndex 索引值开始查找
  • 返回值

    查找到返回 true 没有查找到 返回 false

join()
  • 作用

    返回将数组元素按照指定的字符分隔的字符串

  • 语法

    let result = array.join('|')
    console.log(result) // '1|2|3|4'
    
  • 参数

    • str 可选 指定分隔符,如果不传则按照逗号分隔
  • 返回值

    • 所有元素按照分隔符转成的字符串
splice()
  • 作用
  • 语法
  • 参数
  • 返回值