摘要: 前言 v8 是 Chrome 的 JavaScript 引擎,其中关于数组的排序完全采用了 JavaScript 实现。 排序采用的算法跟数组的长度有关,当数组长度小于等于 10 时,采用插入排序,大于 10 的时候,采用快速排序。(当然了,这种说法并不严谨)。 我们先来看看插入排序和快速排序。 插 阅读全文
posted @ 2017-11-02 13:48 qiaoyang_z 阅读(1736) 评论(0) 推荐(0) 编辑
摘要: 乱序 乱序的意思就是将数组打乱。 嗯,没有了,直接看代码吧。 Math.random 一个经常会遇见的写法是使用 Math.random(): var values = [1, 2, 3, 4, 5]; values.sort(function(){ return Math.random() - 0 阅读全文
posted @ 2017-11-02 13:47 qiaoyang_z 阅读(547) 评论(0) 推荐(0) 编辑
摘要: 定义 程序调用自身的编程技巧称为递归(recursion)。 阶乘 以阶乘为例: function factorial(n) { if (n == 1) return n; return n * factorial(n - 1) } console.log(factorial(5)) // 5 * 阅读全文
posted @ 2017-11-02 13:46 qiaoyang_z 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 定义 函数记忆是指将上次的计算结果缓存起来,当下次调用时,如果遇到相同的参数,就直接返回缓存中的数据。 举个例子: function add(a, b) { return a + b; } // 假设 memoize 可以实现函数记忆 var memoizedAdd = memoize(add); 阅读全文
posted @ 2017-11-02 13:45 qiaoyang_z 阅读(327) 评论(0) 推荐(0) 编辑
摘要: 需求 我们需要写一个函数,输入 'kevin',返回 'HELLO, KEVIN'。 尝试 var toUpperCase = function(x) { return x.toUpperCase(); }; var hello = function(x) { return 'HELLO, ' + 阅读全文
posted @ 2017-11-02 13:44 qiaoyang_z 阅读(452) 评论(0) 推荐(0) 编辑
摘要: 需求 我们现在需要写一个 foo 函数,这个函数返回首次调用时的 Date 对象,注意是首次。 解决一:普通方法 var t; function foo() { if (t) return t; t = new Date() return t; } 问题有两个,一是污染了全局变量,二是每次调用 fo 阅读全文
posted @ 2017-11-02 13:43 qiaoyang_z 阅读(514) 评论(0) 推荐(0) 编辑
摘要: 定义 维基百科中对偏函数 (Partial application) 的定义为: In computer science, partial application (or partial function application) refers to the process of fixing a 阅读全文
posted @ 2017-11-02 11:51 qiaoyang_z 阅读(3650) 评论(0) 推荐(0) 编辑
摘要: 定义 维基百科中对柯里化 (Currying) 的定义为: In mathematics and computer science, currying is the technique of translating the evaluation of a function that takes mu 阅读全文
posted @ 2017-11-02 11:50 qiaoyang_z 阅读(975) 评论(0) 推荐(0) 编辑
摘要: 前言 虽然标题写的是如何判断两个对象相等,但本篇我们不仅仅判断两个对象相等,实际上,我们要做到的是如何判断两个参数相等,而这必然会涉及到多种类型的判断。 相等 什么是相等?在《JavaScript专题之去重》中,我们认为只要 的结果为 true,两者就相等,然而今天我们重新定义相等: 我们认为: 不 阅读全文
posted @ 2017-11-02 11:49 qiaoyang_z 阅读(2556) 评论(0) 推荐(0) 编辑
摘要: each介绍 jQuery 的 each 方法,作为一个通用遍历方法,可用于遍历对象和数组。 语法为: jQuery.each(object, [callback]) 回调函数拥有两个参数:第一个为对象的成员或数组的索引,第二个为对应变量或内容。 // 遍历数组 $.each( [0,1,2], f 阅读全文
posted @ 2017-11-02 11:48 qiaoyang_z 阅读(4401) 评论(0) 推荐(0) 编辑
摘要: 前言 在开发中,我们经常会遇到在数组中查找指定元素的需求,可能大家觉得这个需求过于简单,然而如何优雅的去实现一个 findIndex 和 findLastIndex、indexOf 和 lastIndexOf 方法却是很少人去思考的。本文就带着大家一起参考着 underscore 去实现这些方法。 阅读全文
posted @ 2017-11-02 11:47 qiaoyang_z 阅读(1926) 评论(0) 推荐(0) 编辑
摘要: 扁平化 数组的扁平化,就是将一个嵌套多层的数组 array (嵌套可以是任何层数)转换为只有一层的数组。 举个例子,假设有个名为 flatten 的函数可以做到数组扁平化,效果就会如下: var arr = [1, [2, [3, 4]]]; console.log(flatten(arr)) // 阅读全文
posted @ 2017-11-02 11:46 qiaoyang_z 阅读(1361) 评论(0) 推荐(0) 编辑
摘要: 前言 取出数组中的最大值或者最小值是开发中常见的需求,但你能想出几种方法来实现这个需求呢? Math.max JavaScript 提供了 Math.max 函数返回一组数中的最大值,用法是: Math.max([value1[,value2, ...]]) 值得注意的是: 而我们需要分析的是: 1 阅读全文
posted @ 2017-11-02 11:45 qiaoyang_z 阅读(2634) 评论(0) 推荐(0) 编辑
摘要: 前言 jQuery 的 extend 是 jQuery 中应用非常多的一个函数,今天我们一边看 jQuery 的 extend 的特性,一边实现一个 extend! extend 基本用法 先来看看 extend 的功能,引用 jQuery 官网: Merge the contents of two 阅读全文
posted @ 2017-11-02 11:42 qiaoyang_z 阅读(598) 评论(0) 推荐(0) 编辑
摘要: 前言 拷贝也是面试经典呐! 数组的浅拷贝 如果是数组,我们可以利用数组的一些方法比如:slice、concat 返回一个新数组的特性来实现拷贝。 比如: var arr = ['old', 1, true, null, undefined]; var new_arr = arr.concat(); 阅读全文
posted @ 2017-11-02 11:41 qiaoyang_z 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 前言 在上篇《JavaScript专题之类型判断(上)》中,我们抄袭 jQuery 写了一个 type 函数,可以检测出常见的数据类型,然而在开发中还有更加复杂的判断,比如 plainObject、空对象、Window 对象等,这一篇就让我们接着抄袭 jQuery 去看一下这些类型的判断。 plai 阅读全文
posted @ 2017-11-02 11:40 qiaoyang_z 阅读(383) 评论(0) 推荐(0) 编辑
摘要: 前言 类型判断在 web 开发中有非常广泛的应用,简单的有判断数字还是字符串,进阶一点的有判断数组还是对象,再进阶一点的有判断日期、正则、错误类型,再再进阶一点还有比如判断 plainObject、空对象、Window 对象等等。 以上都会讲,今天是上半场。 typeof 我们最最常用的莫过于 ty 阅读全文
posted @ 2017-11-02 11:39 qiaoyang_z 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 前言 数组去重方法老生常谈,既然是常谈,我也来谈谈。 双层循环 也许我们首先想到的是使用 indexOf 来循环判断一遍,但在这个方法之前,让我们先看看最原始的方法: var array = [1, 1, '1', '1']; function unique(array) { // res用来存储结 阅读全文
posted @ 2017-11-02 11:38 qiaoyang_z 阅读(265) 评论(0) 推荐(0) 编辑