需求如果传入的字符串是回文字符串,则返回 true,否则返回 false。回文 palindrome,指在忽略标点符号、大小写和空格的前提下,正着读和反着读一模一样,例如:上海自来水来自海上。代码实现function palindrome(str) { // 去除空格,字母转小写 str = str.replace(' ', '').toLowerCase() // 去除非字母数字 if (str.match(/[^0-9a-z]/)) { while (str.match(/[^0-9a-z]/)) { str = str.replace(/[^0-9a-z]/, '') } } // 回文检查 let newStr = '' for (let i = str.length - 1; i >= 0; i--) { newStr += str[i] } return str == newStr }
树是一种分层数据的抽象模型。二叉树中的节点最多只能有两个子节点:一个是左侧子节点,另一个是右侧子节点。二叉搜索树二叉搜索树(BST)是二叉树的一种,但是只允许在左侧节点存储(比父节点)小的值,在右侧节点存储(比父节点)大的值。插入const COMPARE = { less: -1, more: 1, equal: 0, } class Node { constructor(key) { this.key = key this.left = null this.right = null } } class BST { constructor(key) { this.root = null } // 插入 insert(key) { if (this.root == null) { this.root = new Node(key) } else { this.insertNode(this.root, key) } } compareFn(a, b) {
随机算法将一个数组中的值进行随机排列,现实中的一个常见场景是洗扑克牌。function shuffle(array) { for (let i = array.length - 1; i > 0; i--) { const randomIndex = Math.floor(Math.random() * (i + 1)) swap(array, i, randomIndex) } return array } function swap(array, a, b) { const temp = array[a] array[a] = array[b] array[b] = temp } arr = [1, 2, 3, 4, 5] console.log(...arr) console.log(shuffle(arr))
顺序搜索最基本的搜索算法,最低效的一种搜索算法。它的机制是,将每一个数据结构中的元素和要找的元素做比较。function search(array, value) { for (let i = 0; i < array.length; i++) { if (value === array[i]) { return i } } return -1 } console.log(search([1, 3, 5, 2, 0], 5))二分搜索这个算法要求被搜索的数据结构已排序。function binarySearch(find, arr, start, end) { start = start || 0 end = end || arr.length - 1 if (start <= end && find >= arr[start] && find <= arr[end]) { if (arr[start] === find) { return start
冒泡排序在所有排序算法中最简单,然而,从运行时间的角度看,冒泡排序是最差的一个。function swap(array, a, b) { const temp = array[a] array[a] = array[b] array[b] = temp } function bubbleSort(array) { const { length } = array for (let i = 0; i < length; i++) { for (let j = 0; j < length - 1 - i; j++) { if (array[j] > array[j + 1]) { swap(array, j, j + 1) } } } console.log(array) } bubbleSort([1, 3, 5, 2, 0])选择排序一种原址比较排序算法。选择排序大致思路是找到数据结构中的最小值并将其放置在第一位,接着找到第二小的值并将其放在第二位,以此类推。function s
集合结构集合是由一组无序且唯一(即不能重复)的项组成的。class MySet { items = {} add(element) { if (!this.has(element)) { this.items[element] = element return true } return false } delete(element) { if (this.has(element)) { delete this.items[element] return true } return false } has(element) { return element in this.items } clear() { this.items = {} } size() { return Object.keys(this.items).length } values() { return Object.valu
数组结构参考:https://aboss.top/post/173/栈结构栈(stack)又名堆栈,是一种运算受限的线性表,限定仅在表尾进行插入和删除操作。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素称作进栈,从一个栈删除元素称作出栈。特点:后进先出,即 Last in First out (LIFO)。class Stack { #items = [] //# 符号声明私有属性,ES13 新特性 pop() { return this.#items.pop() //出栈 } push(data) { return this.#items.push(data) //进栈 } peek() { return this.#items.at(-1) //栈顶 } isEmpty() { return this.#items.length === 0 } size() { return this.#items.length } clear() { this.#items
Vue 中的指令按照不同的用途可分为6大类:内容渲染指令属性绑定指令事件绑定指令双向绑定指令条件渲染指令列表渲染指令内容渲染内容渲染指令用来辅助开发者渲染 DOM 元素的文本内容。常见的内容渲染指令有3个:v-text、{{ }}、v-html。v-text会覆盖掉元素里面的内容。{{ }}专业名称是插值表达式(Mustache),专门用来解决 v-text 会覆盖默认文本内容的问题。插值表达式可以使用过滤器:<div id="app"> <p>{{message | capitalize}}</p> </div> <script> const app = new Vue({ el: "#app", data: { message: "i love vue!", }, filters: { capitalize(str) { return str.charAt(0).toUpperCase
环境搭建引入Vue下载js文件:开发版本:https://cn.vuejs.org/js/vue.js生产版本:https://cn.vuejs.org/js/vue.min.js用<script>标签引入,Vue会被注册为一个全局变量。用谷歌浏览器打开html文件,切换到控制台,会出现2个小提示。Vue开发者工具第一个小提示,安装Vue开发者工具后,就不会出现提示了。如果安装后还是不行的话,右键「Vue Devtools」->「管理扩展程序」,打开「允许访问文件网址」即可。修改全局配置第二个小提示,需要修改全局配置://阻止 vue 在启动时生成生产提示 Vue.config.productionTip = false;脚手架自定义创建项目安装脚手架全局安装:npm i -g @vue/cli,如果之前安装过低版本的脚手架,想更新至最新版本的话,可先卸载当前版本再安装最新版本:npm un -g vue-cli。查看版本:vue -V。自定义创建项目创建项目:vue create test:? Please pick a preset: Manually selec
现代JavaScript教程以最新的JavaScript标准为基准。通过简单但足够详细的内容,为你讲解从基础到高阶的JavaScript相关知识。课程的核心内容包含2部分,涵盖了JavaScript编程语言相关知识和浏览器行为。此外还有一系列的专题文章。网站地址官网:https://zh.javascript.info/
网上各种找首先,肯定是找一下有没有别人写好的库,自己写不现实的。最终找到了 js-xlsx,评价还不错,不过已经好久没有更新了,将就用用看咯。js-xlsx 虽然支持修改导出文件的样式,不过是在它的专业版中,其分为社区版和专业版,社区版是开源的,但是却不支持修改导出文件的样式,专业版拥有更多的功能,这其中就包括修改样式。如果需要使用专业版,要邮件联系开发者,去咨询价格,购买它。好在又找到了 xlsx-style 这个项目(同样的好久没有更新了,凑合着用),它可以对导出的 excel 文件进行一些样式上的修改。开干<script src="js/xlsx.extendscript.js"></script> <script src="js/xlsx-style/xlsx.full.min.js"></script> <script src="js/export.js"></script> <script> function btn_expo
构造函数和原型ES6之前没有提供 extends 继承,可以通过构造函数+原型对象模拟实现继承,被称为组合继承。call()调用这个函数并且修改函数运行时的 this 指向。function fn() { console.log(this) } const obj = { name: "佩奇", } fn() //Window fn.call(obj) //Object继承父类属性:function Father(name, age) { this.name = name this.age = age } function Son(name, age, score) { //把父构造函数的this改为子构造函数的this Father.call(this, name, age, score) this.score = score } const son = new Son("佩奇", 10, 99) console.log(son) //Son {name: '佩奇', age: 10, score: 99}继承父类方
简介TypeScript有助于提高代码质量,保证代码安全,更适合用在大型的企业级项目。不一定适合那些小型的、短期的个人项目。TypeScript官网在线编译页面TypeScript Playground:http://www.typescriptlang.org/play/TypeScript官方提供的编译器叫做tsc,可以将TypeScript脚本编译成JavaScript脚本。本机想要编译 TypeScript代码,必须安装tsc。根据约定,TypeScript脚本文件使用.ts后缀名,JavaScript脚本文件使用.js后缀名。tsc的作用就是把.ts脚本转变成.js脚本。静态类型检查在代码运行前进行检查,发现代码的错误或不合理之处,减小运行时异常的出现几率,此种检查叫「静态类型检查」,TypeScript的核心就是「静态类型检查」,简言之就是把运行时的错误前置。同样的功能,TypeScript代码量要大于JavaScript,但由于TypeScript代码结构更加清晰,在后期代码维护中TypeScript却远胜于JavaScript。编译TypeScript命令行编译要把.t
函数动态参数arguments是函数内部内置的伪数组变量,它包含了调用函数时传入的所有实参。function sum() { let s = 0 for (let i = 0; i < arguments.length; i++) { s += arguments[i] } console.log(s) } sum(1, 3, 5)剩余参数...是语法符号,用于获取多余的实参,是个真数组。实际开发中,推荐使用剩余参数。function sum(a, b, ...other) { let s = a + b for (let i = 0; i < other.length; i++) { s += other[i] } console.log(s) } sum(1, 3, 5, 7)箭头函数this箭头函数不会创建自己的this,它只会从自己作用域链的上一层沿用this。如果直接在箭头后设置对象字面量为返回值时,对象字面量必须使用()括起来。const fn = () => ({ name: '李小龙' }) consol
编程环境PrettierPrettier 是一个 “有主见” 的前端代码格式化工具。在VSCode中安装好Prettier插件后,可能需要自定义一些配置,可在项目根目录下添加配置文件.prettierrc:{ "singleQuote": true, "arrowParens": "avoid" }配置代码片段在VSCode中,「文件」->「首选项」->「配置用户代码片段」->「新建全局代码片段文件...」,输入自定义文件名,回车。在文件中写入:{ "Print to console": { "scope": "javascript,typescript", "prefix": "cl", "body": ["console.log($1);"], "description": "Log outpu
const str = "abcdefg" const reg = /bc/ //定义规则 console.log(reg.test(str)) //是否匹配 true console.log(reg.exec(str)) //执行检索 返回数组元字符大多数的字符仅能够描述它们本身,这些字符称作普通字符,例如所有的字母和数字。也就是说普通字符只能够匹配字符串中与它们相同的字符。元字符是一些具有特殊含义的字符,可以极大提高灵活性和强大的匹配功能。比如,规定用户只能输入26个英文字母,普通字符的话 abcdefghijk…,但是换成元字符写法:[a-z]。在正则表达式中,“.”“*”“?”等符号都有特殊的含义,如果想匹配的就是这些符号,可使用中括号取消这些符号的特殊含义。分类边界符:表示位置,开头^和结尾$量词:表示重复次数字符类:比如 d 表示 0-9符号含义[A-z]任意字母.任意字符+至少一个,相当于{1,}*0个或多个,相当于{0,}?0个或1个,相当于{0,1}w任意字母数字下划线W除了字母数字下划线d任意数字,相当于[0-9]D除了数字s空格S除了空格b单词
almsalms是一个7X24小时在线要饭系统,纯原生js手撸,无任何框架,不用数据库,不用部署到服务器上,零成本。代码部署GitHub,CF托管加速,数据托管在leancloud,移动端交互体验超棒,一键打赏,免去APP来回切换,感兴趣的同学可以到项目学习。源码下载GitHub:https://github.com/yong-s/alms
三毛
头发渐少,仅剩三根