输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。
思路
// 若 a+b<b+a ; a排在在前的规则排序。 // 如[2, 21], 因为 212 < 221 所以排序后为[21, 2] function PrintMinNumb...
在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。
function duplicate(numbers, duplication) {...
一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。
function FindNumsAppearOnce(array) { // return list, 比如[a,b],其中ab是出现一次的两个数字 if (array.length === 0) return false let map = new Map() for (let i = 0; i < array.l...
摘自《JavaScript设计模式与开发实践》
装饰者模式能够在不改变对象自身的基础上,在程序运行期间给对象动态地添加职责。跟继承相比,装饰者是一种更轻便灵活的做法,这是一种“即用即付”的方式,比如天冷了就多穿一件外套,需要飞行时就在头上插一支竹蜻蜓,遇到一堆食尸鬼时就点开 AOE(范围攻击)技能。
co...
通过路由带参数进行传值
两个组件 A和B,A组件通过query把orderId传递给B组件(触发事件可以是点击事件、钩子函数等)。
this.$router.push({ path: '/conponentsB', query: { orderId: 123 } }) // 跳转到B
在B组件中获取A组件传递过来的参数。
this.$route.query.orderId
父子组件之间的传值
父组件往子组件...
给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]A[1]...A[i-1]A[i+1]...A[n-1]。不能使用除法。
function multiply(array) { let B = [] let change = false for (let i = 0; i < array.length; i++) { B[i] = 1 for (let j = 0; j < array.leng...
摘自《javascript数据结构与算法第二版》
斐波那契数列
1 和 2 的斐波那契数是 1;
n(n>2)的斐波那契数是 (n - 1) 的斐波那契数加上 (n - 2) 的斐波那契数。
递归版
function fibonacci(num) { if(num === 1 || num === 2) { return 1 } return fibonacci(num - 1) + fibonacci(num - 2)}
非递归...
正则表达式字符匹配攻略
正则表达式是匹配模式,要么匹配字符,要么匹配位置。
两种模糊匹配
如果正则只有精确匹配是没多大意义的,比如 /hello/,也只能匹配字符串中的 "hello" 这个子串。
var regex = /hello/;console.log( regex.test("hello") );// => true
正则表达式之所以强大,是因为其能实现模糊...
摘自《深入理解ES6》
尽管一些JS开发者强烈认为这门语言不需要类,但为处理类而创建的代码库如此之多,导致ES6最终引入了类。
ES5 中的仿类结构
JS在ES5及更早版本中都不存在类。与类最接近的是:创建一个构造器,然后将方法指派到该构造器的原型上。这种方式通常被称为创建一个自定义类型。
function Perso...
摘自《剖析Vue.js内部运行机制》
Vue.js是一款MVVM框架,数据模型仅仅是普通的JavaScript对象,但是对这些对象进行操作时,却能影响对应视图,它的核心实现就是响应式系统。尽管我们在使用Vue.js 进行开发时不会直接修改响应式系统,但是理解它的实现有助于避开一些常见的坑,也有助于在遇见一些琢磨不透的问...