告别 Spread 运算符:使用默认 Composer

news2024/12/23 18:01:08

在 JavaScript 中处理对象时,通常需要为空的strings// objects、或属性设置默认值。在处理嵌套对象时,这会变得更加复杂并且需要复杂的编程逻辑。然而,有了“ default-composer ”库,这项任务变得简单易行。arraysnullundefined 
 

什么是“默认作曲家”?

“ default-composer ” 是一个轻量级 (~300B) JavaScript 库,它允许您为嵌套对象设置默认值。该库将现有对象中的空字符串/数组/对象、null 或未定义值替换为已定义的默认值,这有助于简化编程逻辑并减少设置默认值所需的代码量。


 

默认作曲家徽标


 

优于 Spread 运算符和 Object.assign

虽然...spread运算符andObject.assign()也可用于设置对象的默认值,但 " default-composer" 提供了优于这些方法的几个好处。

  • 适用于嵌套对象,而展开运算符和Object.assign()仅适用于浅层对象。
  • 比扩展运算符或更简洁易读Object.assign()。使用这些方法设置默认值所需的代码可能会变得非常冗长且难以阅读,尤其是在处理嵌套对象时。
  • 更精细地控制哪些属性设置为默认值。与传播运营商和Object.assign()

想象一下我们有这个原始对象:

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">original</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">{</span>
  <span style="color:var(--syntax-name-color)">name</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-string-color)">""</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-name-color)">score</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-declaration-color)">null</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">{</span>
    <span style="color:var(--syntax-name-color)">street</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-string-color)">""</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">city</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-string-color)">""</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">state</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-string-color)">""</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">zip</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-string-color)">""</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-text-color)">},</span>
  <span style="color:var(--syntax-name-color)">emails</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">[],</span>
  <span style="color:var(--syntax-name-color)">hobbies</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">[],</span>
  <span style="color:var(--syntax-name-color)">another</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">anotherValue</span><span style="color:var(--syntax-string-color)">"</span>
<span style="color:var(--syntax-text-color)">};</span>
</code></span></span>

这些是默认值:

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">defaults</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">{</span>
  <span style="color:var(--syntax-name-color)">name</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">John Doe</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-name-color)">score</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-literal-color)">5</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">{</span>
    <span style="color:var(--syntax-name-color)">street</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">123 Main St</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">city</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">Anytown</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">state</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">CA</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">zip</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">12345</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-text-color)">},</span>
  <span style="color:var(--syntax-name-color)">emails</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">john.doe@example.com</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">],</span>
  <span style="color:var(--syntax-name-color)">hobbies</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">[</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">reading</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-string-color)">traveling</span><span style="color:var(--syntax-string-color)">"</span><span style="color:var(--syntax-text-color)">],</span>
<span style="color:var(--syntax-text-color)">};</span>
</code></span></span>

""我们想要合并这些对象,将、null[]undefined的原始值替换{}为默认值。所以这个想法是得到:

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-name-color)">console</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">log</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">results</span><span style="color:var(--syntax-text-color)">)</span>
<span style="color:var(--syntax-comment-color)">/**
 * {
 * "name": "John Doe",
 * "score": 5,
 * "address": {
 *   "street": "123 Main St",
 *   "city": "Anytown",
 *   "state": "CA",
 *   "zip": "12345"
 * },
 * "emails": [
 *   "john.doe@example.com"
 * ],
 * "hobbies": [
 *   "reading",
 *   "traveling"
 * ],
 * "another": "anotherValue"
 **/</span>
</code></span></span>

可能使用传播运算符我们将不得不做这样的事情:

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">results</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">{</span>
  <span style="color:var(--syntax-text-color)">...</span><span style="color:var(--syntax-name-color)">defaults</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-text-color)">...</span><span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-name-color)">name</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">name</span> <span style="color:var(--syntax-error-color)">||</span> <span style="color:var(--syntax-name-color)">defaults</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">name</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-name-color)">score</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">score</span> <span style="color:var(--syntax-error-color)">??</span> <span style="color:var(--syntax-name-color)">defaults</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">score</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-comment-color)">// "??" beacause 0 is valid</span>
  <span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">{</span>
    <span style="color:var(--syntax-text-color)">...</span><span style="color:var(--syntax-name-color)">defaults</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-text-color)">...</span><span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">street</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">street</span> <span style="color:var(--syntax-error-color)">||</span> <span style="color:var(--syntax-name-color)">defaults</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">street</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">city</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">city</span> <span style="color:var(--syntax-error-color)">||</span> <span style="color:var(--syntax-name-color)">defaults</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">city</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">state</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">state</span> <span style="color:var(--syntax-error-color)">||</span> <span style="color:var(--syntax-name-color)">defaults</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">state</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">zip</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">zip</span> <span style="color:var(--syntax-error-color)">||</span> <span style="color:var(--syntax-name-color)">defaults</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">zip</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-text-color)">},</span>
  <span style="color:var(--syntax-name-color)">emails</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">emails</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">length</span> <span style="color:var(--syntax-text-color)">?</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">emails</span> <span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">defaults</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">emails</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-name-color)">hobbies</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">hobbies</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">length</span> <span style="color:var(--syntax-text-color)">?</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">hobbies</span> <span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">defaults</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">hobbies</span><span style="color:var(--syntax-text-color)">,</span>
<span style="color:var(--syntax-text-color)">};</span>
</code></span></span>

Object.assign这样的事情:

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">results</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-text-color)">Object</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">assign</span><span style="color:var(--syntax-text-color)">({},</span> <span style="color:var(--syntax-name-color)">defaults</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-text-color)">{</span>
  <span style="color:var(--syntax-name-color)">name</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">name</span> <span style="color:var(--syntax-error-color)">||</span> <span style="color:var(--syntax-name-color)">defaults</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">name</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-name-color)">score</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">score</span> <span style="color:var(--syntax-error-color)">??</span> <span style="color:var(--syntax-name-color)">defaults</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">score</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-comment-color)">// "??" beacause 0 is valid</span>
  <span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">Object</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">assign</span><span style="color:var(--syntax-text-color)">({},</span> <span style="color:var(--syntax-name-color)">defaults</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-text-color)">{</span>
    <span style="color:var(--syntax-name-color)">street</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">street</span> <span style="color:var(--syntax-error-color)">||</span> <span style="color:var(--syntax-name-color)">defaults</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">street</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">city</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">city</span> <span style="color:var(--syntax-error-color)">||</span> <span style="color:var(--syntax-name-color)">defaults</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">city</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">state</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">state</span> <span style="color:var(--syntax-error-color)">||</span> <span style="color:var(--syntax-name-color)">defaults</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">state</span><span style="color:var(--syntax-text-color)">,</span>
    <span style="color:var(--syntax-name-color)">zip</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">zip</span> <span style="color:var(--syntax-error-color)">||</span> <span style="color:var(--syntax-name-color)">defaults</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">address</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">zip</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-text-color)">}),</span>
  <span style="color:var(--syntax-name-color)">emails</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">emails</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">length</span> <span style="color:var(--syntax-text-color)">?</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">emails</span> <span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">defaults</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">emails</span><span style="color:var(--syntax-text-color)">,</span>
  <span style="color:var(--syntax-name-color)">hobbies</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">hobbies</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">length</span> <span style="color:var(--syntax-text-color)">?</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">hobbies</span> <span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-name-color)">defaults</span><span style="color:var(--syntax-text-color)">.</span><span style="color:var(--syntax-name-color)">hobbies</span><span style="color:var(--syntax-text-color)">,</span>
<span style="color:var(--syntax-text-color)">});</span>
</code></span></span>

维护它可能非常繁琐,尤其是对于巨大的、嵌套很深的对象。

头痛...

我们defaultComposer只能使用这个:

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">import</span> <span style="color:var(--syntax-name-color)">defaultComposer</span> <span style="color:var(--syntax-declaration-color)">from</span> <span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">default-composer</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">;</span> <span style="color:var(--syntax-comment-color)">// 300B</span>
<span style="color:var(--syntax-comment-color)">// ...</span>
<span style="color:var(--syntax-declaration-color)">const</span> <span style="color:var(--syntax-name-color)">results</span> <span style="color:var(--syntax-error-color)">=</span> <span style="color:var(--syntax-name-color)">defaultComposer</span><span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">defaults</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">original</span><span style="color:var(--syntax-text-color)">);</span>
</code></span></span>

更容易维护,对吧?😉

越快乐越容易

如果在我们的项目中有一个与其他属性不同的特殊属性,并且我们想要另一个替换逻辑,会发生什么情况?好吧,虽然defaultComposer默认情况下有一个配置来检测默认值,但您可以根据需要配置它。

<span style="color:var(--syntax-text-color)"><span style="color:var(--syntax-text-color)"><code><span style="color:var(--syntax-declaration-color)">import</span> <span style="color:var(--syntax-text-color)">{</span> <span style="color:var(--syntax-name-color)">defaultComposer</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">setConfig</span> <span style="color:var(--syntax-text-color)">}</span> <span style="color:var(--syntax-declaration-color)">from</span> <span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">default-composer</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">;</span>

<span style="color:var(--syntax-name-color)">setConfig</span><span style="color:var(--syntax-text-color)">({</span>
  <span style="color:var(--syntax-comment-color)">// This function is executed for each value of each key that exists in </span>
  <span style="color:var(--syntax-comment-color)">// both the original object and the defaults object.</span>
  <span style="color:var(--syntax-name-color)">isDefaultableValue</span><span style="color:var(--syntax-text-color)">:</span> <span style="color:var(--syntax-text-color)">(</span>
    <span style="color:var(--syntax-comment-color)">// - key: key of original or default object</span>
    <span style="color:var(--syntax-comment-color)">// - value: value in the original object</span>
    <span style="color:var(--syntax-comment-color)">// - defaultableValue: pre-calculed boolean, you can use or not, </span>
    <span style="color:var(--syntax-comment-color)">//   depending if all the rules of the default-composer library are correct</span>
    <span style="color:var(--syntax-comment-color)">//   for your project or you need a totally different ones.</span>
    <span style="color:var(--syntax-text-color)">{</span> <span style="color:var(--syntax-name-color)">key</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">value</span><span style="color:var(--syntax-text-color)">,</span> <span style="color:var(--syntax-name-color)">defaultableValue</span> <span style="color:var(--syntax-text-color)">}</span>
    <span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-error-color)">=></span> <span style="color:var(--syntax-text-color)">{</span>
    <span style="color:var(--syntax-declaration-color)">if</span> <span style="color:var(--syntax-text-color)">(</span><span style="color:var(--syntax-name-color)">key</span> <span style="color:var(--syntax-error-color)">===</span> <span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">rare-key</span><span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-text-color)">)</span> <span style="color:var(--syntax-text-color)">{</span>
      <span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-name-color)">defaultableValue</span> <span style="color:var(--syntax-error-color)">||</span> <span style="color:var(--syntax-name-color)">value</span> <span style="color:var(--syntax-error-color)">===</span> <span style="color:var(--syntax-string-color)">'</span><span style="color:var(--syntax-string-color)">EMPTY</span><span style="color:var(--syntax-string-color)">'</span>
    <span style="color:var(--syntax-text-color)">}</span> 

    <span style="color:var(--syntax-declaration-color)">return</span> <span style="color:var(--syntax-name-color)">defaultableValue</span><span style="color:var(--syntax-text-color)">;</span>
  <span style="color:var(--syntax-text-color)">},</span>
<span style="color:var(--syntax-text-color)">});</span>
</code></span></span>

结论

我引入了“ default-composer ”库作为在 JavaScript 中为嵌套对象设置默认值的解决方案。

Object.assign该库是轻量级的,提供了比扩展运算符和方法更简洁、更易于阅读的代码。它还可以更精细地控制哪些属性应设置为默认值。

在本文中,我提供了有关如何使用该库以及它如何简化用于维护嵌套对象的代码的示例。

最后,我解释了如何配置该库来处理需要不同替换逻辑的特殊情况。总的来说,“ default-composer ”是一个有用的库,可以简化为 JavaScript 中的嵌套对象设置默认值的任务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/623927.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

零瑕疵全核心,这份RocketMQ笔记仅用330页直接封神

RocketMQ天生为金融互联网领域而生&#xff0c;追求高可靠、高可用、高并发、低延迟 RocketMQ在阿里集团也被广泛应用在订单&#xff0c;交易&#xff0c;充值&#xff0c;流计算&#xff0c;消息推送&#xff0c;日志流式处理&#xff0c;binglog分发等场景 其主要功能有&am…

怎样快速选择正确的可视化图表?

数据可视化的图表类型十分丰富&#xff0c;好的图表可以有效、清晰地呈现数据的信息。对于用户而言&#xff0c;选择正确的图表是十分关键的&#xff0c;不仅可以达到“一图胜千言”的效果&#xff0c;而且会直接影响分析的结果。 用户选择正确的数据可视化图表前&#xff0c;…

银河麒麟服务器ZYJ操作系统,文件储存inode节点占用根目录/空间满了解决办法

【问题描述】 今天发现业务系统运转异常&#xff0c;df -h 检查服务器发现磁盘根目录空间未满&#xff0c;df -i 检查发现根目录文件满了。inode节点中&#xff0c;记录了文件的类型、大小、权限、所有者、文件连接的数目、创建时间与更新时间等重要的信息&#xff0c;还有一个…

蓝奥声核心技术分享——无线同步数据传输技术

1、技术背景 无线同步数据传输技术指基于对目标场景状态变化的协同感知而获得触发响应并进行智能决策&#xff0c;属于蓝奥声核心技术--边缘协同感知(EICS&#xff09;技术的关键支撑性技术之一。该项技术主要涉及网络服务节点与目标对象设备之间的无线通信方式及服务机制与流…

flask做图书管理系统

一.Flask框架是一个轻量级的Web应用程序框架&#xff0c;它提供了一种简单的方法来创建Web应用程序。在本文中&#xff0c;我们将使用Flask框架来开发一个图书管理系统。在使用 Flask 开发时&#xff0c;建议使用虚拟环境来隔离不同项目的依赖关系&#xff0c;避免冲突。 摘要 …

阿里元境郭旷野:多端时代,云渲染在为元宇宙开发降本

当“AI进入iPhone时代”时&#xff0c;创造iPhone的苹果带着Vision Pro来了。在元宇宙初创企业今年上半年融资&#xff08;6.64亿美元&#xff09;较去年同期&#xff08;29.3亿美元&#xff09;大幅下降的背景下&#xff0c;苹果硬件新产品的问世被视作元宇宙赛道的“提气”之…

【MySQL】JDBC编程 (Java的数据库编程:JDBC 导入驱动包 MySQL Connector Java 编写JDBC代码 插入操作 查询操作)

文章目录 Java的数据库编程&#xff1a;JDBC导入驱动包MySQL Connector Java 编写JDBC代码插入操作查询操作 Java的数据库编程&#xff1a;JDBC 真正在工作中操作数据库,99.9%都是通过代码来操作,很少会手动在客户端里输入sql语句.各种数据库,MySQL,Oracle,SQL Server 在开发的…

必须了解的不同地区的支付方式FP独立站安全收款方式

跨境收款是跨境电商自建站系统最重要的功能之一&#xff0c;其收款方式一直是众多独立站卖家特别是做fp独立站的最为关注的问题之一&#xff0c;加上chatgpt出现&#xff0c;对fp独立站的检测审核更加严格&#xff0c;那么&#xff0c;你知道要怎么做才能安全收款吗&#xff1f…

深度估计阅读记录

VolSDF(neurips 2021) 题目&#xff1a;Volume Rendering of Neural Implicit Surfaces 链接&#xff1a;https://arxiv.org/pdf/2106.12052.pdf 目标&#xff1a;使用SDF这种表示方式替换NeRF中的MLP&#xff0c;使得在几何形状上获得更准确的结果。我们通过将体密度建模为几…

Python实现Fleiss Kappa一致性分析,并计算Z值和p值等相关统计量

参考资料 Fleiss Kappa的定义 Fleiss Kappa的原论文因为要付费才能阅读&#xff0c;我这里就不放链接了 Fleiss kappa - Wikipediahttps://en.wikipedia.org/wiki/Fleiss%27_kappa Fleiss Kappa相关统计量 Z值&#xff0c;p值&#xff0c;95%置信区间 属性一致性分析 的 …

如何使用切片辅助超推理 SAHI 技术对 YOLOv8 进行推理过程和代码实现

前面章节已经详细描述了 切片辅助超推理(SAHI )技术原理介绍 引入SAHI,这是一种专为小物体检测而设计的尖端流水线。SAHI 利用切片辅助推理和微调技术的力量,彻底改变了检测对象的方式。SAHI 物体检测的与众不同之处在于它与任何物体检测器的无缝集成,无需进行繁琐的微调…

Nmap安装

Nmap 文章目录 Nmap简介下载安装Zenmapnmap 配置环境变量检查是否安装成功界面 简介 Nmap是一款非常强大实用的工具&#xff0c;可用于检测网络上的存活主机&#xff0c;检测目标主机的开放端口&#xff0c;检测端口上相应服务上网版本&#xff0c;主机操作系统等信息&#xf…

基于计量学角度对传感器的灵敏度的理解和举例

基于计量学角度对传感器的灵敏度的理解和举例 灵敏度指标是考察传感器特性的主要指标之一&#xff0c;是对传感器设计、生产和选型过程中非常重要的参数。本文将基于计量学知识对灵敏度进行举例介绍。 一、灵敏度定义 灵敏度是传感器、测量装置或仪器的响应的变化除以对应的…

设计模式(八):结构型之装饰器模式

设计模式系列文章 设计模式(一)&#xff1a;创建型之单例模式 设计模式(二、三)&#xff1a;创建型之工厂方法和抽象工厂模式 设计模式(四)&#xff1a;创建型之原型模式 设计模式(五)&#xff1a;创建型之建造者模式 设计模式(六)&#xff1a;结构型之代理模式 设计模式…

中国计算机学会CCF推荐的国际会议(图像处理方向)

CCF推荐的国际会议&#xff08;医学图像处理方向&#xff09; 1 介绍2 最新目录3 投了会议可以再投期刊吗&#xff1f;4 个人感想 1 介绍 CCF根据论文的质量和影响力&#xff0c;对国际期刊和国际会议进行了评估和分类&#xff0c;以便研究者在选择发表论文或参与学术交流时有…

亚马逊美国站 隐形墨水笔CPC认证 儿童玩具

隐形墨水笔 一种采用透明墨水并集成紫外线灯的笔。 隐形笔是指书写后的字迹在正常光线下不能看见&#xff08;隐形&#xff09;的笔&#xff0c;只有在紫外灯的照射下才能看见。一般用来标记物品或写不想轻易让人看见的语句。 市面上的隐形笔分为水性隐形墨水笔、油性隐形墨水…

【CSS 04】Zoro 外边距 外边距合并 内边距 内容高度与宽度 框模型 轮廓

CSS 说在前面外边距 margin外边距合并 margin_collapse内边距 padding高度与宽度 dimension框&#xff08;盒子&#xff09;模型 boxmodel轮廓 outline 说在前面 最近发现一个有趣的事情&#xff0c;就是CSDN会把我写在【】中的Zoro当做文章主要技术关键词&#xff0c;尽管我在…

科技政策 | 国家、广东省、深圳市的制造业单项冠军企业(产品)遴选申报指南来啦!

原创 | 文 BFT机器人 近日深圳市工业和信息化局开始了2023年技术创新项目扶持计划制造业单项冠军奖励项目申报。 那么制造业单项冠军&#xff0c;国家、广东省、深圳市各级申请需要什么条件呢&#xff1f;有那些注意事项呢&#xff1f;今天&#xff0c;一文带大家读懂。 01 申…

设计模式(九):结构型之桥接模式

设计模式系列文章 设计模式(一)&#xff1a;创建型之单例模式 设计模式(二、三)&#xff1a;创建型之工厂方法和抽象工厂模式 设计模式(四)&#xff1a;创建型之原型模式 设计模式(五)&#xff1a;创建型之建造者模式 设计模式(六)&#xff1a;结构型之代理模式 设计模式…

赛效:如何在线给图片降噪

1&#xff1a;在电脑上搜索“改图鸭”网站&#xff0c;登录账号后在“图片修复”菜单里点击“图片降噪”。 2&#xff1a;点击降噪工具页面中间的&#xff0c;将图片添加到该页面。 3&#xff1a;图片添加上去后会自动降噪处理&#xff0c;对比原图和效果图&#xff0c;如果对效…