当前位置: 首页 > java >正文

集合及相关

对象

  • 增删改查
let obj = {name: '',data: {age: 18}
}
// 增加属性
obj.sister = ‘anier’
Object.assign(obj.data, {sex: ‘man’})
// 删除属性
Reflect.deleteProperty(obj, ‘name’)
// 修改属性
obj.name = ‘tom’
Object.assign(obj.data, {age: 20})
// 查询属性(自身属性)
obj.hasOwnProperty(‘name’)
// 查询属性(自身及原型链)
Reflect.has(obj, ‘name’)
name in obj
  • 对象中属性描述符的定义和修改

Object.defineProperty(obj, prop, descriptor)

let obj = {_age: 3
};
<!-- 数据属性 -->
Object.defineProperty(obj, 'name', {configurable: false,  // 能否通过 delete 删除属性,能否修改属性的特性,能否把属性修改为访问器属性。enumerable: false, // 能否通过 for-in 循环返回属性。 writable: true, // 能否修改属性的值value: '张三' // 这个属性的数据值。
})
<!-- 访问器属性 -->
Object.defineProperty(obj, 'age', {configurable: true,enumerable: true,get: function () {return this._age;},set: function (newValue) {if (newValue > 5) {this._age += newValue;} else {this._age = newValue;}}
})
  • 对象的深拷贝
let obj = {name: '',data: {age: 18}
}方式1、JSON.parse(JSON.stringify(o))
JSON.parse(JSON.stringify(obj))  
JSON.parse(JSON.stringify(obj.data))      => {age: 18}
注意:这种方式无法实现对对象中方法的深拷贝方式2、递归实现,这种方式可以深拷贝对象中的方法
function copy(obj){let res = obj instanceof Array ? [] : {}let arr = Object.entries(obj)for(let [key,value] of arr){res[key] = typeof value == 'object' ? copy(value) : value;}return res
}
let aa = copy(obj);
-------------------------------------------------
// 以下属于浅拷贝
变量赋值、拓展运算符、Object.assign 都是浅拷贝
let newObj = obj
let newArr = [...arr]
let newObj = {...obj}
let newObj = Object.assign({},obj)

数组

Map

  • 初始化
// 方法一
let map = new Map([['a', 1],['b', 2],['c', 3],
])
// 方法二
let map = new Map()
map.set('name', 'jim')
  • 方法属性
增和改:set(key, val)
删:delete(key), clear()
查:has(key),size
其他:keys(),values(),entries()
  • 遍历
// forEach
map.forEach((value, key,map) => {// value是88, key是math,map是原map
}
// for of
for(let item of map){ // item是['math', 88]
...
}
for(let item of entries){ // item是['math', 88]
...
}
for(let key of keys){ // key是'math'
...
}
  • 转数组

keys() values() entries()并没有转成数组,需要用延展符号放到[]中

let map = new Map([['math', 88], ['english', 55]])  //Map(2) 0:{'math' => 88} 1:{'english' => 55}
let entries = map.entries() //MapIterator  0: {'math' => 88} 1: {'english' => 55}
let keys = map.keys()  //MapIterator  0: 'math'  1: 'english'
let values = map.values()  //MapIterator  0:88  1: 55
// 若使用数组方法,需要先转数组
let arr = [...map ]  或者 let arr = [...entries ]    //arr为[['math', 88], ['english', 55]]
let keyArr = [...keys]
let valueArr = [...values]

Set

  • 方法属性
增和改:add(val)
删:delete(key), clear()
查:has(key),size
其他:keys(),values(),entries() //keys()和values()返回的结果一样
  • 与数组之间的转化
let set = new Set(arr)
let arr = Array.from(set)
let arr = [...set]
  • 应用
// 数组、字符串去重
new Set(...arr)// 两个Set取交集
[...set].filter(item => {return set2.has(item)
})
// 两个Set取并集
[...set1, ...set2]
http://www.xdnf.cn/news/2224.html

相关文章:

  • 什么是 Swagger 以及如何在 Spring Boot 中实现 Swagger:配置与实践指南
  • 【黑马JavaWeb+AI知识梳理】前端Web基础01 - HTML+CSS
  • 【leetcode100】单词拆分
  • C++:位图
  • 【Charles】抓包工具安装配置unknown问题解决
  • 《人件》第三章 正确的人
  • 在Windows11中配置Git+SSH环境,本此实践使用Gitee(码云),方法同样适用于其它绝大部分Git服务
  • Linux-进程控制
  • 安服实习面试面经总结(也适合hvv蓝初)
  • Linux渗透测试
  • x修改ssh版本号9.9可以躲过漏洞扫描器扫描
  • JAVA---字符串
  • 通过门店销售明细表用SQL得到每月每个门店的销冠和按月的同比环比数据
  • 可视化性能分析工具火焰图
  • function,bind,lambda的用法
  • Claude系列模型-20250426
  • Android12源码编译及刷机
  • JavaWeb——案例(14/x)- 文件上传-阿里云OSS-准备(阿里云 OSS 简介、使用阿里云 OSS 的流程、关键准备工作)
  • 【含文档+PPT+源码】基于Django框架的乡村绿色农产品交易平台的设计与实现
  • DeepSeek预训练追求极致的训练效率的做法
  • 【分布式系统中的“瑞士军刀”_ Zookeeper】二、Zookeeper 核心功能深度剖析与技术实现细节
  • 818协议知识笔记
  • ShaderToy学习笔记 03.多个形状和旋转
  • DHCP配置文件详解
  • 解决conda虚拟环境安装包却依旧安装到base环境下
  • AEB法规升级后的市场预测与分析:技术迭代、政策驱动与产业变革
  • 链接文件及功能安全:英飞凌官方文档摘录 - 基于Tasking与AURIX TC3xx MCAL中Link文件解析以及代码变量定位方法详解
  • C++学习:六个月从基础到就业——STL:分配器与设计原理
  • 一种滑窗像素自差值的深度学习损失函数
  • MySQL主从数据库配置教程