2020-07-30 描述创建一个对象,他的键为每一个键经过提供的函数运行后的结果,但值还是原有提供对象的值。提示使用 Object.keys()迭代对象的键使用 Array.prototype.reduce()创建一个新的对象,使其有着相同的值和经过 fn 映射的键代码 constmapKeys=(obj,fn)=>Object.keys(obj).reduce((acc,k)=>{acc[fn(obj[k]
2020-07-29 描述从指定的对象中创建一个新的对象,使其所有键都为小写。提示使用 Object.keys()和 Array.prototype.reduce()从指定对象中创建一个新的对象使用 String.toLowerCase()将原始对象中的的每一个键转换为小写代码 constlowercaseKeys=obj=>Object.keys(obj).reduce((acc,key)=>{acc[ke
2020-07-28 描述在不修改的情况下,将一个对象中的键值对进行转换。转换后的值和每一个将要被转换的键相对应,他们是值相同的所有键组成的一个数组。如果提供了函数,则将该函数应用于每一个被转换了的键上。提示使用 Object.keys()和 Array.prototype.reduce()来转换一个对象中的键值对如果提供了函数的话,则进行调用第二个参数 fn 为可选值,应用于每一个被转换的键。默认为不运行。
2020-07-27 描述单例是一种面向对象的软件设计模式,用来确保给定的类只能被实例化一次,这在很多不同的情况下都非常有用,例如创建在应用程序之间共享的全局对象和组件。虽然 JavaScript 支持面向对象编程,但他并没有提供许多简单的方式来实现这个模式。说明 Proxyobject 虽然某些方面比较超前,但他最容易扩展。Proxy 对象可用于定义所谓的 traps,这些方法允许为某些操作,如属性查找、赋值等
2020-07-24 描述在 JavaScript 中如何真正阻止对一个对象的修改。const 也可修改说明 JavaScript 中的对象是可修改的,无论你是否将他们定义为 const 变量。事实上,当使用 const 定义一个对象时,只能阻止他再次被赋值。然而,你可以给一个 const 对象或数组的属性进行再次赋值。代码 constmyObj={a:10,b:20,c:30};myObj.a=12;//{a:12,b:2
2020-07-23 描述如果一个 JSON 对象中存在给定的目标键值就返回 true,否则的话返回 false。提示首先检查给定的 keys 是否为一个非空数组,如果为空的话,则提前返回 false 使用 Array.prototype.every()按顺序依次检查给定的每一个键是否都存在于 obj 对象的深层次中使用 Object.prototype.hasOwnProperty()检查 obj 是否没有拥有当前的键,使用 t
2020-07-22 描述根据给定的多个选择器,从一个对象中获取一组与之匹配的属性值。提示使用 Array.prototype.map()迭代每一个选择器使用 String.prototype.replace()将方括号替换为点使用 String.prototype.split('.')将每一个选择器都进行分割使用 Array.prototype.filter()移除空值使用 Array.prototype.r
2020-07-21 描述从一个对象本身(继承为可选项)的枚举属性中返回其值为函数的所有属性。提示使用 Object.keys(obj)迭代对象本身的所有属性如果 inherited 为 true,就使用 Object.get.PrototypeOf(obj)来获取对象所继承的属性使用 Array.prototype.filter()过滤掉值不为函数的属性值第二个参数 inherited 的默认值为 false,表示不
2020-07-20 描述倒序迭代一个对象中的所有属性,为其属性的每一个值都运行提供的回调函数。提示使用 Object.keys(obj)获取对象中的所有属性使用 Array.prototype.reverse()让他们倒序排列使用 Array.prototype.forEach()为每一个键值对运行提供的函数回调函数接受三个参数:值,键,对象本身代码 constforOwnRight=(obj,fn)=>O
2020-07-17 描述迭代一个对象中的所有属性,为其属性的每一个值都运行一个回调函数。提示使用 Object.keys(obj)获取对象中的所有属性使用 Array.prototype.forEach()为每一个键值对运行提供的函数回调函数接受三个参数:值,键,对象本身代码 constforOwn=(obj,fn)=>Object.keys(obj).forEach(key=>fn(obj[key],k
2020-07-16 描述使用路径做为键,将对象进行展开。提示使用递归对 Object.keys(obj)使用 Array.prototype.reduce(),以便将每一个叶子节点转换为展开的路径节点如果一个键的值为对象,函数将进行自身调用,使用适当的 prefix 通过 Object.assign()来创建路径如果一个键的值不为对象,将通过累加器对象为键值对添加适当的前缀第二个参数 prefix 可以为每一个键
2020-07-15 描述迭代对象中的所有属性,如果其值有满足所提供的测试函数,则返回该对象的最后一个属性。否则的话返回 undefined。提示使用 Object.keys(obj)获取对象的所有属性使用 Array.prototype.reverse()进行反向排序使用 Array.prototype.find()对每一对键-值使用提供的函数进行测试回调函数接受三个参数-值,键和对象代码 constfind
2020-07-14 描述迭代对象中的所有属性,如果其值有满足所提供的测试函数,则返回该对象的第一个属性。否则的话返回 undefined。提示使用 Object.keys(obj)获取对象的所有属性使用 Array.prototype.find()对每一对键-值使用提供的函数进行测试回调函数接受三个参数-值,键和对象代码 constfindKey=(obj,fn)=>Object.keys(obj).fin
2020-07-13 描述对数组的 for 循环,reduce 和方法链进行不同纬度的比对。循环说明 for 循环中 for...in、for...of 和 forEach 的不同点由于函数式编程的流行,目前使用率有所下降可以对迭代进行控制,如跳过元素或提前 return 返回的结果数组需要在循环外预先声明使用 Array.prototype.push()或扩展运算符...来进行元素的添加 O(N)复杂度,每一个元素只能迭代一
2020-07-10 描述在 JavaScript 中,对比 for...in、for...of 和 forEach 之间的不同点。for...in 说明 for...in 会迭代对象中所有的可枚举属性,当然也包括继承的可枚举属性。他可以对数组、字符串或普通对象进行迭代,但不能对 Map 或 Set 对象进行迭代。代码 for(letpropin['a','b','c'])console.log(prop);//输出数组的索引:
2020-07-09 描述对两个值进行深度对比,以判断他们是否相等。提示检查两个值是否全等如果他们都表示为同一时间的 Date 对象,则需使用 Date.getTime()进行检测如果他们的值都不是对象的话,需要使用全等(严格比较)进行检测检查其中的一个值是否为 null 或者 undefined 检查他们的属性是否不同如果以上条件都不满足,就需要使用 Object.keys()来检测他们是否有相同数量的键最后需通过
2020-07-08 描述在一个嵌套的 JSON 对象中,根据给定的键返回对应的值。提示使用 in 运算符检测 target 是否存在 obj 中如果存在,返回值 obj[target]否则的话使用 Object.values(obj)和 Array.prototype.reduce()为每一个嵌套的对象递归调用 dig,直到找到第一个相匹配的键/值对代码 constdig=(obj,target)=>targetinobj?
2020-07-07 描述给对象中的所有 undefined 的属性分配默认值。提示使用 Object.assign()创建一个空的对象将原始对象按照键的顺序拷贝到空对象中使用 Array.prototype.reverse()和扩展运算符...按照从左到右的顺序合并默认值最后再次使用 obj 以覆盖原始属性已经拥有的值代码 constdefaults=(obj,...defs)=>Object.assign({}
2020-07-06 描述为对象的每一个键进行深度映射。提示创建一个和所提供对象有着相同值的对象使用提供的函数为该对象中的每一个键进行运行,以便生成新的对应的键使用 Object.keys(obj)迭代对象中的所有键使用 Array.prototype.reduce()创建一个有着同样值且使用 fn 对键进行映射后的新对象代码 constdeepMapKeys=(obj,fn)=>Array.isArray(o
2020-07-03 描述基于 keys 数组,返回嵌套在一个 JSON 对象中的目标值。提示将嵌套在 JSON 对象中你需要的 keys 做为一个数组进行比对使用 Array.prototype.reduce()从 JSON 嵌套对象中逐一获取对应的值如果键存在于对象中,就返回目标值,否则的话就返回 null 代码 constdeepGet=(obj,keys)=>keys.reduce((xs,x)=>(xs&&xs[x]?