🎶 Sym - 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台

📕 链滴笔记 - 一款桌面端笔记应用,支持 Windows、Mac 和 Linux

🎸 Solo - B3log 分布式社区的博客端节点,欢迎加入下一代社区网络

♏ Vditor - 一款浏览器端的 Markdown 编辑器

JavaScript - 将对象按照节点路径逐层展开

2020-07-16 描述使用路径做为键,将对象进行展开。提示使用递归对 Object.keys(obj)使用 Array.prototype.reduce(),以便将每一个叶子节点转换为展开的路径节点如果一个键的值为对象,函数将进行自身调用,使用适当的 prefix 通过 Object.assign()来创建路径如果一个键的值不为对象,将通过累加器对象为键值对添加适当的前缀第二个参数 prefix 可以为每一个键

JavaScript - 获取对象中满足条件的最后一个键

2020-07-15 描述迭代对象中的所有属性,如果其值有满足所提供的测试函数,则返回该对象的最后一个属性。否则的话返回 undefined。提示使用 Object.keys(obj)获取对象的所有属性使用 Array.prototype.reverse()进行反向排序使用 Array.prototype.find()对每一对键-值使用提供的函数进行测试回调函数接受三个参数-值,键和对象代码 constfind

JavaScript - 获取对象中满足条件的键

2020-07-14 描述迭代对象中的所有属性,如果其值有满足所提供的测试函数,则返回该对象的第一个属性。否则的话返回 undefined。提示使用 Object.keys(obj)获取对象的所有属性使用 Array.prototype.find()对每一对键-值使用提供的函数进行测试回调函数接受三个参数-值,键和对象代码 constfindKey=(obj,fn)=>Object.keys(obj).fin

JavaScript - 数组 for 循环,reduce 及方法链剖析

2020-07-13 描述对数组的 for 循环,reduce 和方法链进行不同纬度的比对。循环说明 for 循环中 for...in、for...of 和 forEach 的不同点由于函数式编程的流行,目前使用率有所下降可以对迭代进行控制,如跳过元素或提前 return 返回的结果数组需要在循环外预先声明使用 Array.prototype.push()或扩展运算符...来进行元素的添加 O(N)复杂度,每一个元素只能迭代一

JavaScript - for...in、for...of 和 forEach 的不同点

2020-07-10 描述在 JavaScript 中,对比 for...in、for...of 和 forEach 之间的不同点。for...in 说明 for...in 会迭代对象中所有的可枚举属性,当然也包括继承的可枚举属性。他可以对数组、字符串或普通对象进行迭代,但不能对 Map 或 Set 对象进行迭代。代码 for(letpropin['a','b','c'])console.log(prop);//输出数组的索引:

JavaScript - 深度对比

2020-07-09 描述对两个值进行深度对比,以判断他们是否相等。提示检查两个值是否全等如果他们都表示为同一时间的 Date 对象,则需使用 Date.getTime()进行检测如果他们的值都不是对象的话,需要使用全等(严格比较)进行检测检查其中的一个值是否为 null 或者 undefined 检查他们的属性是否不同如果以上条件都不满足,就需要使用 Object.keys()来检测他们是否有相同数量的键最后需通过

JavaScript - 根据给定的键获取对应的值

2020-07-08 描述在一个嵌套的 JSON 对象中,根据给定的键返回对应的值。提示使用 in 运算符检测 target 是否存在 obj 中如果存在,返回值 obj[target]否则的话使用 Object.values(obj)和 Array.prototype.reduce()为每一个嵌套的对象递归调用 dig,直到找到第一个相匹配的键/值对代码 constdig=(obj,target)=>targetinobj?

JavaScript - 默认值的填充

2020-07-07 描述给对象中的所有 undefined 的属性分配默认值。提示使用 Object.assign()创建一个空的对象将原始对象按照键的顺序拷贝到空对象中使用 Array.prototype.reverse()和扩展运算符...按照从左到右的顺序合并默认值最后再次使用 obj 以覆盖原始属性已经拥有的值代码 constdefaults=(obj,...defs)=>Object.assign({}

JavaScript - 为所有键进行映射

2020-07-06 描述为对象的每一个键进行深度映射。提示创建一个和所提供对象有着相同值的对象使用提供的函数为该对象中的每一个键进行运行,以便生成新的对应的键使用 Object.keys(obj)迭代对象中的所有键使用 Array.prototype.reduce()创建一个有着同样值且使用 fn 对键进行映射后的新对象代码 constdeepMapKeys=(obj,fn)=>Array.isArray(o

JavaScript - 根据多层键求值

2020-07-03 描述基于 keys 数组,返回嵌套在一个 JSON 对象中的目标值。提示将嵌套在 JSON 对象中你需要的 keys 做为一个数组进行比对使用 Array.prototype.reduce()从 JSON 嵌套对象中逐一获取对应的值如果键存在于对象中,就返回目标值,否则的话就返回 null 代码 constdeepGet=(obj,keys)=>keys.reduce((xs,x)=>(xs&&xs[x]?

JavaScript - 深度冻结

2020-07-02 描述深度冻结一个对象。提示使用 Object.keys()获取参数对象中的所有属性使用 Array.prototype.forEach()对获取的所有属性进行迭代对所有属性递归调用 Object.freeze(obj)对每一个属性使用 Object.isFrozen()进行检查根据需要调用 deepFreeze()方法最终使用 Object.freeze()冻结给定的对象代码 constdee

JavaScript - 深度克隆

2020-07-01 描述深度克隆一个对象。提示使用递归检查传入的对象是否为 null,如果是的话,返回 null 使用 Object.assign()和空对象({})为原始对象创建一个副本使用 Object.keys()和 Array.prototype.forEach()对需要深度克隆的键值进行判断代码 constdeepClone=obj=>{if(obj===null)returnnull;letclone

JavaScript - 对象的绑定

2020-06-30 描述将对象的方法绑定到对象上下文中,以覆盖现有存在的方法。提示使用 Array.prototype.forEach()返回需要绑定的方法使用 Function.prototype.apply()将给定的上下文(obj)应用到每一个指定的 fn 上代码 constbindAll=(obj,...fns)=>fns.forEach(fn=>((f=obj[fn]),(obj[fn]=funct

JavaScript - 使用 Node.js 生成 UUID

2020-06-29 描述在 Node.js 中生成一个 UUID。提示使用 cryptoAPI 生成符合 RFC4122 版本四的 UUID 代码 constcrypto=require('crypto');constUUIDGeneratorNode=()=>([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,c=>(c^(crypto.randomBytes(1)[0]&(1

JavaScript - 读取文件中的每一行

2020-06-24 描述从指定文件中返回包含每一行的数组。提示使用 fs 中的 readFileSync 方法,根据指定文件创建一个 Buffer 使用 toString(encoding)方法将 buffer 转换为字符串根据文件内容使用 split 将正文进行逐行分割(\n)后放入一个数组中代码 constfs=require('fs');constreadFileLines=filename=>fs.readFile

Deno 将永远支持 TypeScript

2020-06-23 背景昨天看到 5reasonswhyDenowillstopusingTypeScript 这个标题时被吓了一跳。突然想到会不会是 1.0 发布中提到的 TypeScript 编译瓶颈,但他的解决方案并不是放弃 TypeScript 呀。很害怕 Deno 自己啪啪啪打脸,于是又特意跑到官网上看看"SupportsTypeScriptoutofthebox"这一特性还在不在。哦,放心了,于是慢慢的一探

JavaScript - JSON 格式化后保存到文件

2020-06-22 描述将一个 JSON 对象写入文件中。提示使用 fs.writeFileSync(),模版变量和 JSON.stringify()将一个 json 对象写入一个.json 的文件中代码 constfs=require('fs');constJSONToFile=(obj,filename)=>fs.writeFileSync(`${filename}.json`,JSON.stringify(o

JavaScript - 是否为可写流

2020-06-19 描述检查给定的参数是否为可写流。提示首先检查参数是否不等于 null 其次使用 typeof 检查参数是否为 object 类型,其 pipe 属性是否为 function 类型最后还需要使用 typeof 检查_write 和_writableState 属性是否分别为 function 和 object 代码 constisWritableStream=val=>val!==null&&typeofval==='

JavaScript - 当前环境是否为 Travis CI

2020-06-18 描述检查当前环境是否为 TravisCI。提示检查当前环境是否有 TRAVIS 和 CI 这两个环境变量(默认环境变量)代码 constisTravisCI=()=>'TRAVIS'inprocess.env&&'CI'inprocess.env;示例检测当前环境是否为 TravisCI:isTravisCI();//代码没有运行在 TravisCI 中则返回 false 返回总目录每天 30 秒系列之 J