【ES6】使用记录

Symbol

const sym = Symbol('Mo_qyue');
console.log(sym.description)  //'Mo_qyue'
  • 作为属性名Symbol
let mySymbol = Symbol()
let a = {}
a[mySymbol] = 'hello';
console.log(a[mySymbol]) //hellolet b={[mySymbol]:'hello'}
console.log(b[mySymbol]) //hellolet c=Object.defineProperty({},mySymbol,{value:'hello'})
console.log(c[mySymbol])//hello
  • 注意,Symbol值作为对象属性名时,不能用点运算符
const mySymbol = Symbol()
const a = {}
a.mySymbol = 'hello'
console.log(a['mySymbol']) //"hello"
a[mySymbol]//这个是访问不到的
const obj = {}
let a = Symbol('a')
let b = Symbol('b')
obj[a] = 'hello'
obj[b] = 'World'
let cArr = Reflect.ownKeys(obj)
for (let item of cArr) {console.log(obj[item])//hello// World
}
  • Symbol.for()

Symbol.for()与Symbol() 都会生成新的Symbol,他们的区别是,前者会被登记在全局进行搜索,后者不会


let s1 = Symbol('foo')
let s2 = Symbol('foo')
console.log(s1 === s2)//false
let s3 = Symbol.for('foo')
let s4 = Symbol.for('foo')
console.log(s3 === s4)//true
  • Symbol.iterator
    对象的Symbol.iterator属性,指向该对象的默认遍历器的方法
const a = {}
a[Symbol.iterator] = function* () {yield 1;yield 2;yield 3
};
console.log([...a])

判断非空isEmpty

const isEmpty=val=>val===null||!(Object.keys(val)||val).length

判断一个字符串是否有重复的字符

//采用桶排序的思想
const isData = str => {let flag = Array.from({ length: 128 }, v => 0)for (let i = 0; i < str.length; i++) {let c = str.charCodeAt(i)if (flag[c] > 0) {return false} else {flag[c]++}}return true
}
console.log(isData('abc'))

判断两个字符集是否相同

const equls = (s1, s2) => {const map = new Map();for (let i = 0; i < s1.length; i++) {if (map.get(s1[i]) == null) {map.set(s1[i], 1)}}for (let i = 0; i < s2.length; i++) {if (map.get(s2[i]) === null) {return false}}return true
}

判断是否是旋转词


const joint = (str, s1) => {let a = ''let b = [];for (let i = 0; i < str.length; i++) {if (i == 0) {a = str.slice(i)} else {a = str.slice(i) + str.slice(0, i)}b.push(a)}return b.indexOf(s1) > -1 ? true : false
}

String


String.prototype.charAt(index)     0<=index<=length-1   返回特定位置的字符String.prototype.charCodeAt(index)                      返回给定的字符的Unicode值String.prototype.concat()                               连接两个字符串文本,返回新的字符串String.prototype.includes()       判断字符串是否包含                      endsWith()  判断当前字符串是否是以另外一个给定的子字符串'结尾'  Boolean
startsWith()                                          '开头' BooleanString.localeCompare()       'abcsbda'.split('').sort((a, b) => a.localeCompare(b))String.prototype.padEnd()       两个参数,第一个数字符串的最大长度,第一个参数是添加的字符串,长度不能超过max.lengthrepeat()    重复的次数
replace()    替换
slice()  

比较

类型运算规则
两个值类型进行比较直接比较数据在序列中的大小
值类型与引用类型比较将引用类型的数据转换为与值类型数据相同的数据
两个引用类型比较无意义,总是返回false
console.log('b' > 'a')  //true

对象与数组互转

// 状态码说明: 100->对账成功、101->对账中、102->审核中、103->对账失败、104->取消对账
// 规定有如下样式映射表: 
const style2StatusMap = {success: [100],warning: [101,102],danger: [103,104]
}
//结果
const status2styleMap = {100: 'success',101: 'warning',102: 'warning',103: 'danger',104: 'danger'
}const status = obj =>Object.entries(obj).reduce((acc, val, i, array) => {val[1].map(item => {acc[item] = array[i][0]})return acc}, {})

Set

  • 由于Set结构没有键名,只有键值所有keys方法和values方法的行为完全一致
let a=new Set([1,2,3,4])//a.keys()    a.values() 或者直接用of遍历
for (let item of a) {console.log(item)
}
/** 1,2,3,4* */
  • forEach()
let a = new Set([1, 2, 3, 4])
let b = [];
a.forEach(v=>b.push(v))
console.log(b)
  • 数组的map和filter方法也可以间接用于Set
let set =new Set([1,2,3])
let set1=new Set([...set].map(v=>v*2))
console.log(set1)
//Set { 2, 4, 6 }
let set2=new Set([...set].filter(v=>v%2==0))
console.log(set2)
// Set { 2 }
  • 使用Array.from()
let set = new Set([1, 2, 3, 4])
let set1 = Array.from(set, val => val * 2)
console.log(set1)
//[ 2, 4, 6, 8 ]

判断undefined

const isUndefined = value => value == void 0
let a;
console.log(isUndefined(a)) //true

合并对象


const isObject = value => toString(value) === '[object Object]'const merage = (a, b) => {for (let item in b) {if (isObject(b[item])) {a[item]=merage(a[item],b[item])}else{a[item]=b[item]}}return a
}

去重value

const uniqueBy = (arr, fn) => {return arr.filter((val, index, array) => {return array.findIndex(item =>typeof (fn) == 'function' ? fn.call(this, item) == fn.call(this, val): val[fn] == item[fn])== index})
}

递归逆序

const fun = num => {let num1=num/10let num2=num%10if (!Math.floor(num1)) {return num}if (Math.floor(num1)) {return `${num2}`+fun(Math.floor(num1))}
}
console.log(fun('12345'))
//不用递归,不用api
const fun = num => {let end=num.length-1let sum=''while (end>=0) {sum+=num[end]end--}return sum
}
console.log(fun('12345'))

禁止右键,选择,复制

// 鼠标右键事件   选择             复制
['contextmenu', 'selectstart', 'copy'].forEach(function (ev) {document.addEventListener(ev, function (event) {return event.preventDefault()})
})
//event.preventDefault()  阻止默认的点击事件执行

递归

//阶乘
const fact = n => {if (n == 1) {return n}return fact(n - 1) * n
}console.log(fact(5))//最大公约数
const gcd = (a, b) => {if (b == 0) return areturn gcd(b, a % b)
}
console.log(gcd(5, 10))
// 走楼梯(一个台阶总共有n级台阶,如果一次可以跳1,2,
//问有多少种可能
const solve=n=>{if(n==1)  return 1if(n==2)  return 2return solve(n - 1) + solve(n - 2)
}
console.log(solve(2))//归并排序
const mergeSort = array => {if (array.length < 2) return arraylet mid = Math.floor(array.length / 2)let left = array.slice(0, mid)let right = array.slice(mid)return merge(mergeSort(left), mergeSort(right))
}
const merge = (left, right) => {let result = []while (left.length > 0 && right.length > 0) {if (left[0] < right[0]) {result.push(left[0])} else {result.push(right[0])}}return result.concat(left).concat(right)
}

数字前面加密


const mask = (cc, num = 4, mask = '*') => `${cc}`.slice(-num).padStart(`${cc}`.length, mask);mask(1234567890); // '******7890'
mask(1234567890, 3); // '*******890'
mask(1234567890, -4, '$'); // '$$$$567890'

字符串倒序

const reverseString = str => [...str].reverse().join('');reverseString('foobar'); // 'raboof'

字符串升序

localeCompare 可以用来判断升序还是降序

const sortCharactersInString = str =>
[...str].sort((a, b) => a.localeCompare(b)).join('');

Array.from

const cities = [{ name: 'Milan', visited: 'no' },{ name: 'Palermo', visited: 'yes' },{ name: 'Genoa', visited: 'yes' },{ name: 'Berlin', visited: 'no' },{ name: 'Hamburg', visited: 'yes' },{ name: 'New York', visited: 'yes' }
];const cityNames = Array.from(cities, ({ name}) => name);
解构
cities.map(({name}) => name);//给数组分组
const chunk=(arr,size)=>{return  Array.from({length:Math.ceil(arr.length/size)},(v,i)=>arr.slice(i*size,size*(i+1)))
};console.log(chunk([1, 2, 3, 4, 45], 2)); //[ [ 1, 2 ], [ 3, 4 ], [ 45 ] ]

去重

//对象的属性是唯一的
let tempList = [12, 3, 43, 5, 56, 34, 2, 1, 3, 4, 5];
Object.keys(tempList.reduce((acc, val) => (acc[val] = 0, acc), {})).map(Number);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/818927.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

金蝶云星空与领星ERP对接集成分布式调入单查询打通添加/编辑本地产品

金蝶云星空与领星ERP对接集成分布式调入单查询打通添加/编辑本地产品 接通系统&#xff1a;金蝶云星空 金蝶K/3Cloud结合当今先进管理理论和数十万家国内客户最佳应用实践&#xff0c;面向事业部制、多地点、多工厂等运营协同与管控型企业及集团公司&#xff0c;提供一个通用的…

Unity 扩展自定义编辑器窗口

在Assets文件夹路径下任意位置创建Editor文件夹&#xff0c;将扩展编辑器的代码放在Editor文件夹下 生成编辑器窗口 代码中首先引用命名空间 using UnityEditor; 然后将创建的类继承自EditorWindow public class MenuEditor : EditorWindow 然后通过扩展编辑器菜单功能调用…

51-40 Align your Latents,基于LDM的高分辨率视频生成

由于数据工程、仿真测试工程&#xff0c;咱们不得不进入AIGC图片视频生成领域。兜兜转转&#xff0c;这一篇与智驾场景特别密切。23年4月&#xff0c;英伟达Nvidia联合几所大学发布了带文本条件融合、时空注意力的Video Latent Diffusion Models。提出一种基于LDM的高分辨率视…

ActiveMQ 06 Request/Response模型实现

Active MQ 06 Request/Response模型实现 QueueRequestor 同步阻塞 TemporaryQueue 异步监听&#xff0c;当消息过多时会创建响应的临时queue JMSCorrelationID 消息属性 异步监听&#xff0c;公用queue 调优总结 Topic加强 可追溯消息 http://activemq.apache.org/re…

自然语言处理(Natural Language Processing, NLP)简介

自然语言处理 (NLP) 是计算机科学的一个分支&#xff0c;更具体地说&#xff0c;是人工智能 (AI) 的分支&#xff0c;旨在让计算机能够以与人类大致相同的方式理解文本和语音。 自然语言处理 (NLP) 将计算语言学&#xff08;基于规则的人类语言建模&#xff09;与统计、机器学…

华为云Stack学习笔记

云服务层-基础设施层-----------------为云服务和华为云stack环境的部署提供基本的硬件支持 1.计算资源&#xff1a;服务器 &#xff08;1&#xff09;国产&#xff1a;兆芯服务器、海光服务器、飞腾服务器、鲲鹏服务器(泰山服务器、黄河服务器、宝德服务器) &#xff08;2&…

JavaWeb--正则表达式

目录 1. 简介 1.1. 语法 1.1.1. 使用RegExp构造函数创建正则表达式 1.1.2. 使用正则表达式字面量语法创建正则表达式 1.1.3. 正则表达式的应用 2. 修饰符 3. 方括号 4. 元字符 5. 量词 6. RegExp对象方法 7. 支持正则的String的方法 8. 正则表达式体验 8.1. 验证 …

【uniapp / vue】中动态添加绑定style 或 class

一、style样式动态设置 1.普通对象动态添加&#xff08;比较常见&#xff09; <template><view><view :style"{color:fontColor}"> </view><view :style"{ paddingTop: num px }"></view><view :style"{bac…

MySQL8.0.36-社区版:通用语法(2)

语法格式规范 sql语句可以以单号或者多行为书写&#xff0c;以分号结尾 可以使用空格或者缩进来增加可读性 mysql的sql语句不区分大小写&#xff0c;但是推荐大写关键字 注释分为单号注释和多行 单号注释&#xff1a;--内容 或者 # 内容 多行注释/* 注释内容 */ sql语句的…

面试算法-175-将有序数组转换为二叉搜索树

题目 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;请你将其转换为一棵 平衡 二叉搜索树。 示例 1&#xff1a; 输入&#xff1a;nums [-10,-3,0,5,9] 输出&#xff1a;[0,-3,9,-10,null,5] 解释&#xff1a;[0,-10,5,null,-3,null,9] 也将被视…

C++11的新特性

C11是由C标准委员会指定的语言规范。相比于C98/03&#xff0c;C11则带来了数量可观的变化&#xff0c;其中包含了约140 个新特性&#xff0c;以及对C03标准中约600个缺陷的修正&#xff0c;C11能更好地用于系统开发和库开发、语法更加泛华和简单化、更加稳定和安全&#xff0c;…

数据结构 -- 数组

本篇文章主要是对数组的实操&#xff0c;所以对数组的概念不在赘述&#xff0c;了解更多数组相关可参照链接 Java数组的概念及使用-CSDN博客 1、DynamicArray类 package com.hh.algorithm.array;import java.util.Arrays; import java.util.Iterator; import java.util.functi…

记录--病理切片图像处理

简介 数字病理切片&#xff0c;也称为全幻灯片成像&#xff08;Whole Slide Imaging&#xff0c;WSI&#xff09;或数字切片扫描&#xff0c;是将传统的玻片病理切片通过高分辨率扫描仪转换为数字图像的技术。这种技术对病理学领域具有革命性的意义&#xff0c;因为它允许病理…

【linux】如何写一个launch文件

编写一个ROS&#xff08;Robot Operating System&#xff09;的launch文件是为了方便地启动一组相关的节点&#xff08;nodes&#xff09;、参数服务器&#xff08;parameter server&#xff09;参数、消息发布者/订阅者&#xff08;publishers/subscribers&#xff09;、服务&…

深入浅出 -- 系统架构之Spring、SpringBoot、SpringCloud的区别

首先我们做技术&#xff0c;尤其是java开发人员&#xff0c;应该对Spring、SpringBoot、SpringCloud 三个家伙一点不陌生。 结合发展史Spring出现的最早&#xff0c;后面为了可以让开发人员偷懒&#xff0c;简化配置&#xff0c;就是约定犹于配置或者说大于&#xff0c;进而出…

每日OJ题_BFS解决最短路③_力扣127. 单词接龙

目录 ③力扣127. 单词接龙 解析代码 ③力扣127. 单词接龙 127. 单词接龙 难度 困难 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord -> s1 -> s2 -> ... -> sk&#xff1a; 每一对相邻的单词只差一个字母。…

互联网元搜索引擎SearXNG

最近有个很火的项目叫 FreeAskInternet&#xff0c;其工作原理是&#xff1a; 第一步、用户提出问题第二步、用 SearXNG&#xff08;本地运行&#xff09;在多个搜索引擎上进行搜索第三步、将搜索结果传入 LLM 生成答案 所有进程都在本地运行&#xff0c;适用于需要快速获取信…

Python数据分析与应用 |第4章 使用pandas进行数据预处理 (实训)

表1-1healthcare-dataset-stroke.xlsx 部分中风患者的基础信息和体检数据 编号性别高血压是否结婚工作类型居住类型体重指数吸烟史中风9046男否是私人城市36.6以前吸烟是51676女否是私营企业农村N/A从不吸烟是31112男否是私人农村32.5从不吸烟是60182女否是私人城市34.4抽烟是…

【LAMMPS学习】八、基础知识(3.2)使用chunks计算系统属性

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

蓝桥杯 — —灵能传输

灵能传输 友情链接&#xff1a;灵能传输 题目&#xff1a; 输入样例&#xff1a; 3 3 5 -2 3 4 0 0 0 0 3 1 2 3输出样例&#xff1a; 3 0 3思路&#xff1a; 题目大意&#xff1a;给出一个数组&#xff0c;每次选择数组中的一个数&#xff08;要求不能是第一个数与最后一个…