<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Jack</title>
        <link>https://paragraph.com/@coinwork</link>
        <description>undefined</description>
        <lastBuildDate>Tue, 28 Jul 2026 19:05:11 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Jack</title>
            <url>https://storage.googleapis.com/papyrus_images/f222fe96862a783906e19f2b5397efe4970a959b5ca73cb8416eac9806e0048b.webp</url>
            <link>https://paragraph.com/@coinwork</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[太好说话]]></title>
            <link>https://paragraph.com/@coinwork/5Q9X0M9w1m3zUHFdKtPv</link>
            <guid>5Q9X0M9w1m3zUHFdKtPv</guid>
            <pubDate>Fri, 05 Aug 2022 04:37:11 GMT</pubDate>
            <description><![CDATA[太好说话的人，一定是太过善良。 但这样的善良一点也不靠谱。对谁都好，就意味着没有爱憎。没有爱憎，就意味着对现实的世界，不辨美丑，不论是非，不分善恶，以为笼络了所有，就得到了所有。 结果，非但一无所得，还可能一无是处。 也就是说，你善良是没有错的，但善良得没有原则，就显得有点懦弱了。 太好说话，是交往的一种致命缺陷。与太难说话相比，后者不过关了一扇门，前者是开了无数门，结果八面来风不说，还可能四方受气。 是的，你抹不开面子，有人就敢不给你面子。 你太好说话，人家也就什么话都敢说，知道说出来，在你这里也没事。这是你的软肋、你的七寸。 拿捏你，是因为你好拿捏。你的心慈面软，难敌他人的心狠手辣。 抹不开面子的人，一般都好面子。 这样的人，有一点虚荣，有一点懦弱，有一点清高，有一点矜持，出世五分，入世五分，半遮半掩，半推半就，看似英雄主义，实则投降主义。 本来该拒绝的，稀里糊涂地应允了。本来该一刀两断的，还要苟且到藕断丝连。你不下决心，就意味着给对方信心。 打肿脸充的胖子，最终不是胖子。 不要为不值得的人难为情。否则，你的难为情一文不值。难为情，是人世间很重的情意，要留给有情有义的人。这样...]]></description>
            <content:encoded><![CDATA[<p>太好说话的人，一定是太过善良。</p><p>但这样的善良一点也不靠谱。对谁都好，就意味着没有爱憎。没有爱憎，就意味着对现实的世界，不辨美丑，不论是非，不分善恶，以为笼络了所有，就得到了所有。</p><p>结果，非但一无所得，还可能一无是处。</p><p>也就是说，你善良是没有错的，但善良得没有原则，就显得有点懦弱了。</p><p>太好说话，是交往的一种致命缺陷。与太难说话相比，后者不过关了一扇门，前者是开了无数门，结果八面来风不说，还可能四方受气。</p><p>是的，你抹不开面子，有人就敢不给你面子。</p><p>你太好说话，人家也就什么话都敢说，知道说出来，在你这里也没事。这是你的软肋、你的七寸。</p><p>拿捏你，是因为你好拿捏。你的心慈面软，难敌他人的心狠手辣。</p><p>抹不开面子的人，一般都好面子。</p><p>这样的人，有一点虚荣，有一点懦弱，有一点清高，有一点矜持，出世五分，入世五分，半遮半掩，半推半就，看似英雄主义，实则投降主义。</p><p>本来该拒绝的，稀里糊涂地应允了。本来该一刀两断的，还要苟且到藕断丝连。你不下决心，就意味着给对方信心。</p><p>打肿脸充的胖子，最终不是胖子。</p><p>不要为不值得的人难为情。否则，你的难为情一文不值。难为情，是人世间很重的情意，要留给有情有义的人。这样，你的善良，才有骨气，才有血性，百转千回，始终是条汉子。</p><p>有的人看起来慈眉善目的，如果喜欢看人下菜碟，仍然好不到哪儿去。大凡选择性地予人冷暖的人，并不是真正的良善者。</p><p>真正的善良，都是那些无选择地予人开阔，最后把自己逼到死角的人。</p><p>人太过善良，是人格胜景，也是人格绝境。因为太好，身边会聚拢来好人，因为拉不下脸，也会聚拢来坏人，好人懂得你的好，坏人利用你的好。懂得为你赢得的，往往并不产生价值和意义，而利用为你带来的，却实实在在——有些伤害，会让你哑口无言。</p><p>面黑的人，未必心黑。说话难听的人，未必德行废弛。敢说话的善良，远胜于懦弱的善良。因为，有态度的善良，才会产生威势；敢坚持原则的善良，才会有刚性。</p><p>言辞凛冽，交往起来温暖的人，其实更有味道。</p><p>凛冽，会让你隔着一段敬畏的距离。温暖，又让你觉得这段距离是多么值得。刀子嘴豆腐心，你遇上了最应该交往的人，因为越往岁月深处，你越会为狂风暴雨之后的那方蓝天，而痴迷，而沉醉，越懂得这份交情的醇厚和珍贵。</p><p>“草木有本心，何求美人折。”说说难听的话，并不会改变什么。有时候，你不留情面，别人才想着为你留情面。</p><p>希望你是有态度的，希望你的善良有点刺。因为，太随和太好脾气太好说话，有时候，真是一种交往的缺陷。</p>]]></content:encoded>
            <author>coinwork@newsletter.paragraph.com (Jack)</author>
        </item>
        <item>
            <title><![CDATA[优美散文--陈从周《说园》片段]]></title>
            <link>https://paragraph.com/@coinwork/xXEHYb1X1m6vlDqPvPv5</link>
            <guid>xXEHYb1X1m6vlDqPvPv5</guid>
            <pubDate>Sun, 08 May 2022 07:37:00 GMT</pubDate>
            <description><![CDATA[园有静观、动观之分，这一点我们在造园之先，首要考虑。何谓静观，就是园中予游者多驻足的观赏点;动观就是要有较长的游览线。二者说来，小园应以静观为主，动观为辅，庭院专主静观。大园则以动观为主，静观为辅。前者如苏州网师园，后者则苏州拙政园差可似之。人们进入网师园宜坐宜留之建筑多，绕池一周，有槛前细数游鱼，有亭中待月迎风，而轩外花影移墙，峰峦当窗，宛然如画，静中生趣。至于拙政园径缘池转，廊引人随，与“日午画船桥下过，衣香人影太匆匆”的瘦西湖相仿佛，妙在移步换影，这是动观。立意在先，文循意出。动静之分，有关园林性质与园林面积大小。象上海正在建造的盆景园，则宜以静观为主，即为一例。 中国园林是由建筑、山水、花木等组合而成的一个综合艺术品，富有诗情画意。叠山理水要造成“虽由人作，宛自天开”的境界。山与水的关系究竟如何呢?简言之，模山范水，用局部之景而非缩小(网师园水池仿虎丘白莲池，极妙)，处理原则悉符画本。山贵有脉，水贵有源，脉源贯通，全园生动。我曾经用“水随山转，山因水活”与“溪水因山成曲折，山蹊随地作低平”来说明山水之间的关系，也就是从真山真水中所得到的启示。明末清初叠山家张南垣主张用平冈...]]></description>
            <content:encoded><![CDATA[<p>园有静观、动观之分，这一点我们在造园之先，首要考虑。何谓静观，就是园中予游者多驻足的观赏点;动观就是要有较长的游览线。二者说来，小园应以静观为主，动观为辅，庭院专主静观。大园则以动观为主，静观为辅。前者如苏州网师园，后者则苏州拙政园差可似之。人们进入网师园宜坐宜留之建筑多，绕池一周，有槛前细数游鱼，有亭中待月迎风，而轩外花影移墙，峰峦当窗，宛然如画，静中生趣。至于拙政园径缘池转，廊引人随，与“日午画船桥下过，衣香人影太匆匆”的瘦西湖相仿佛，妙在移步换影，这是动观。立意在先，文循意出。动静之分，有关园林性质与园林面积大小。象上海正在建造的盆景园，则宜以静观为主，即为一例。</p><p>中国园林是由建筑、山水、花木等组合而成的一个综合艺术品，富有诗情画意。叠山理水要造成“虽由人作，宛自天开”的境界。山与水的关系究竟如何呢?简言之，模山范水，用局部之景而非缩小(网师园水池仿虎丘白莲池，极妙)，处理原则悉符画本。山贵有脉，水贵有源，脉源贯通，全园生动。我曾经用“水随山转，山因水活”与“溪水因山成曲折，山蹊随地作低平”来说明山水之间的关系，也就是从真山真水中所得到的启示。明末清初叠山家张南垣主张用平冈小陂、陵阜陂阪，也就是要使园林山水接近自然。如果我们能初步理解这个道理，就不至于离自然太远，多少能呈现水石交融的美妙境界。</p>]]></content:encoded>
            <author>coinwork@newsletter.paragraph.com (Jack)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/1e13eefac037a700528735961926bffdbe29ad11a98fa90c0d131747e3af4c74.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[数组方法]]></title>
            <link>https://paragraph.com/@coinwork/tbNDFeWHhiyq1vUzFycx</link>
            <guid>tbNDFeWHhiyq1vUzFycx</guid>
            <pubDate>Tue, 09 Nov 2021 02:51:51 GMT</pubDate>
            <description><![CDATA[贰。番外篇2.1 重写 Array .prototype. at()// 兼容老浏览器的 MDN polyfill // 注释：Polyfill 是一块代码（通常是 Web 上的 JavaScript），用来为旧浏览器提供它没有原生支持的较新的功能。 if (Array.prototype.at) { Array.prototype.at = function (idx) { return this[this.length + idx] } } arr = ['aaa', 'bbbb', 'cccc', 'dddd'] arr.at(-1) // 'dddd' arr.at(-3) // 'bbbb' 复制代码 2.2 清空数组方法一：Array.length最快arr = ['aaa', 'bbbb', 'cccc', 'dddd'] arr1 = arr arr // ['aaa', 'bbbb', 'cccc', 'dddd'] arr1 // ['aaa', 'bbbb', 'cccc', 'dddd'] arr.length = 0 // 0 arr // [] // ...]]></description>
            <content:encoded><![CDATA[<h1 id="h-" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">贰。番外篇</h1><h2 id="h-21-array-prototype-at" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.1 重写 Array .prototype. at()</h2><pre data-type="codeBlock" text="// 兼容老浏览器的 MDN polyfill
// 注释：Polyfill 是一块代码（通常是 Web 上的 JavaScript），用来为旧浏览器提供它没有原生支持的较新的功能。
if (Array.prototype.at) {
    Array.prototype.at = function (idx) {
        return this[this.length + idx]
    }
}
arr = [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]
arr.at(-1) // &apos;dddd&apos;
arr.at(-3) // &apos;bbbb&apos;
复制代码
"><code><span class="hljs-comment">// 兼容老浏览器的 MDN polyfill</span>
<span class="hljs-comment">// 注释：Polyfill 是一块代码（通常是 Web 上的 JavaScript），用来为旧浏览器提供它没有原生支持的较新的功能。</span>
<span class="hljs-keyword">if</span> (Array.prototype.at) {
    Array.prototype.at <span class="hljs-operator">=</span> <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">idx</span>) </span>{
        <span class="hljs-keyword">return</span> <span class="hljs-built_in">this</span>[<span class="hljs-built_in">this</span>.<span class="hljs-built_in">length</span> <span class="hljs-operator">+</span> idx]
    }
}
arr <span class="hljs-operator">=</span> [<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]
arr.at(<span class="hljs-number">-1</span>) <span class="hljs-comment">// 'dddd'</span>
arr.at(<span class="hljs-number">-3</span>) <span class="hljs-comment">// 'bbbb'</span>
复制代码
</code></pre><h2 id="h-22" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.2 清空数组</h2><h3 id="h-arraylength" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法一：Array.length</h3><p>最快</p><pre data-type="codeBlock" text="arr = [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]
arr1 = arr
arr // [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]
arr1 // [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]

arr.length = 0 // 0

arr // []
// 被引用的数组，也会被清空
arr1 // []
复制代码
"><code>arr = <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
arr1 = arr
arr // <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
arr1 // <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>

arr<span class="hljs-selector-class">.length</span> = <span class="hljs-number">0</span> // <span class="hljs-number">0</span>

arr // <span class="hljs-selector-attr">[]</span>
// 被引用的数组，也会被清空
arr1 // <span class="hljs-selector-attr">[]</span>
复制代码
</code></pre><h3 id="h-arraysplice" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法二：Array.splice()</h3><pre data-type="codeBlock" text="arr = [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]
arr1 = arr

arr.splice(0) // [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]

arr // []
// 同上，被引用的也会被清空
arr1 // []
复制代码
"><code>arr = <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
arr1 = arr

arr<span class="hljs-selector-class">.splice</span>(<span class="hljs-number">0</span>) // <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>

arr // <span class="hljs-selector-attr">[]</span>
// 同上，被引用的也会被清空
arr1 // <span class="hljs-selector-attr">[]</span>
复制代码
</code></pre><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法三：直接赋予新数组[]</h3><p>最慢，且占用内存</p><pre data-type="codeBlock" text="arr = [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]
arr1 = arr

arr = [] // []

arr // []
// 被引用的数组，不会被清空
arr1 // [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]
复制代码
"><code>arr = <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
arr1 = arr

arr = <span class="hljs-selector-attr">[]</span> // <span class="hljs-selector-attr">[]</span>

arr // <span class="hljs-selector-attr">[]</span>
// 被引用的数组，不会被清空
arr1 // <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
复制代码
</code></pre><h2 id="h-23" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.3 扁平化</h2><pre data-type="codeBlock" text="const arr = [1, [2, [3, [4, 5]]], 6];
// =&gt; [1, 2, 3, 4, 5, 6]
复制代码
"><code>const <span class="hljs-attr">arr</span> = [<span class="hljs-number">1</span>, [<span class="hljs-number">2</span>, [<span class="hljs-number">3</span>, [<span class="hljs-number">4</span>, <span class="hljs-number">5</span>]]], <span class="hljs-number">6</span>]<span class="hljs-comment">;</span>
// => <span class="hljs-section">[1, 2, 3, 4, 5, 6]</span>
复制代码
</code></pre><h3 id="h-arrayprototypeflat" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法一：Array.prototype.flat()</h3><pre data-type="codeBlock" text="const res1 = arr.flat(Infinity);
复制代码
"><code>const <span class="hljs-attr">res1</span> = arr.flat(Infinity)<span class="hljs-comment">;</span>
复制代码
</code></pre><h3 id="h-new-regexp" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法二：new RegExp()</h3><pre data-type="codeBlock" text="// 缺点：都会变成字符串
const res2 = JSON.stringify(arr).replace(/\[|\]/g, &apos;&apos;).split(&apos;,&apos;);
// 改良版
const res3 = JSON.parse(&apos;[&apos; + JSON.stringify(arr).replace(/\[|\]/g, &apos;&apos;) + &apos;]&apos;);
复制代码
"><code><span class="hljs-comment">// 缺点：都会变成字符串</span>
const res2 <span class="hljs-operator">=</span> JSON.stringify(arr).replace(<span class="hljs-operator">/</span>\[<span class="hljs-operator">|</span>\]<span class="hljs-operator">/</span>g, <span class="hljs-string">''</span>).split(<span class="hljs-string">','</span>);
<span class="hljs-comment">// 改良版</span>
const res3 <span class="hljs-operator">=</span> JSON.parse(<span class="hljs-string">'['</span> <span class="hljs-operator">+</span> JSON.stringify(arr).replace(<span class="hljs-operator">/</span>\[<span class="hljs-operator">|</span>\]<span class="hljs-operator">/</span>g, <span class="hljs-string">''</span>) <span class="hljs-operator">+</span> <span class="hljs-string">']'</span>);
复制代码
</code></pre><h3 id="h-arrayprototypereduce" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法三：Array.prototype.reduce()</h3><pre data-type="codeBlock" text="const flatten = arr =&gt; {
  return arr.reduce((pre, cur) =&gt; {
    return pre.concat(Array.isArray(cur) ? flatten(cur) : cur);
  }, [])
}
const res4 = flatten(arr);
复制代码
"><code>const flatten <span class="hljs-operator">=</span> arr <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
  <span class="hljs-keyword">return</span> arr.reduce((pre, cur) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
    <span class="hljs-keyword">return</span> pre.concat(Array.isArray(cur) ? flatten(cur) : cur);
  }, [])
}
const res4 <span class="hljs-operator">=</span> flatten(arr);
复制代码
</code></pre><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法四：函数递归</h3><pre data-type="codeBlock" text="const res5 = [];
const fn = arr =&gt; {
  for (let i = 0; i &lt; arr.length; i++) {
    if (Array.isArray(arr[i])) {
      fn(arr[i]);
    } else {
      res5.push(arr[i]);
    }
  }
}
fn(arr);
复制代码
"><code>const res5 <span class="hljs-operator">=</span> [];
const fn <span class="hljs-operator">=</span> arr <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
  <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> arr.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
    <span class="hljs-keyword">if</span> (Array.isArray(arr[i])) {
      fn(arr[i]);
    } <span class="hljs-keyword">else</span> {
      res5.<span class="hljs-built_in">push</span>(arr[i]);
    }
  }
}
fn(arr);
复制代码
</code></pre><h3 id="h-while-some" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法五：while() + some()</h3><pre data-type="codeBlock" text="function flatten(arr) {
    while(arr.some(item=&gt;Array.isArray(item))) {
        arr = [].concat(...arr);
    }
    return arr;
}
复制代码
"><code><span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">flatten</span>(<span class="hljs-params">arr</span>) </span>{
    <span class="hljs-keyword">while</span>(arr.some(item<span class="hljs-operator">=</span><span class="hljs-operator">></span>Array.isArray(item))) {
        arr <span class="hljs-operator">=</span> [].concat(...arr);
    }
    <span class="hljs-keyword">return</span> arr;
}
复制代码
</code></pre><h2 id="h-24" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.4 合并</h2><h3 id="h-arraypush" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法一：Array.push()</h3><pre data-type="codeBlock" text="const arr = [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]
arr.push(1, 2, 3,[4, 5, 6]) // 8
arr // [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;, 1, 2, 3, Array(3)]
复制代码
"><code>const arr = <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
arr<span class="hljs-selector-class">.push</span>(<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>,<span class="hljs-selector-attr">[4, 5, 6]</span>) // <span class="hljs-number">8</span>
arr // <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>, 1, 2, 3, Array(3)]</span>
复制代码
</code></pre><h3 id="h-arrayconcat" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法二：Array.concat()</h3><pre data-type="codeBlock" text="arr.concat([1, 2, 3],[4, 5, 6]) // [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;, 1, 2, 3, 4, 5, 6]
arr // [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]
复制代码
"><code>arr<span class="hljs-selector-class">.concat</span>(<span class="hljs-selector-attr">[1, 2, 3]</span>,<span class="hljs-selector-attr">[4, 5, 6]</span>) // <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>, 1, 2, 3, 4, 5, 6]</span>
arr // <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
复制代码
</code></pre><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法二：扩展运算符</h3><pre data-type="codeBlock" text="[...[1, 2, 3, 4],...[4, 5]] //[1,2,3,4,5,6]
复制代码
"><code>[...[<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">4</span>],...[<span class="hljs-number">4</span>, <span class="hljs-number">5</span>]] <span class="hljs-comment">//[1,2,3,4,5,6]</span>
复制代码
</code></pre><h2 id="h-25" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.5 去重</h2><pre data-type="codeBlock" text="const arr = [1, 1, &apos;1&apos;, 17, true, true, false, false, &apos;true&apos;, &apos;a&apos;, {}, {}];
// =&gt; [1, &apos;1&apos;, 17, true, false, &apos;true&apos;, &apos;a&apos;, {}, {}]
复制代码
"><code>const arr = [<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-string">'1'</span>, <span class="hljs-number">17</span>, <span class="hljs-literal">true</span>, <span class="hljs-literal">true</span>, <span class="hljs-literal">false</span>, <span class="hljs-literal">false</span>, <span class="hljs-string">'true'</span>, <span class="hljs-string">'a'</span>, {}, {}];
<span class="hljs-regexp">//</span> => [<span class="hljs-number">1</span>, <span class="hljs-string">'1'</span>, <span class="hljs-number">17</span>, <span class="hljs-literal">true</span>, <span class="hljs-literal">false</span>, <span class="hljs-string">'true'</span>, <span class="hljs-string">'a'</span>, {}, {}]
复制代码
</code></pre><h3 id="h-new-set" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法一：new Set()</h3><pre data-type="codeBlock" text="const arr1 = Array.from(new Set(arr));
// 或
const arr1 = [...new Set(arr)];

// 是 Set 类型，不是 Array 类型
Object.prototype.toString.call(new Set(arr)) // &apos;[object Set]&apos;
复制代码
"><code><span class="hljs-keyword">const</span> arr1 = <span class="hljs-title class_">Array</span>.<span class="hljs-title function_">from</span>(<span class="hljs-keyword">new</span> <span class="hljs-title class_">Set</span>(arr));
<span class="hljs-comment">// 或</span>
<span class="hljs-keyword">const</span> arr1 = [...<span class="hljs-keyword">new</span> <span class="hljs-title class_">Set</span>(arr)];

<span class="hljs-comment">// 是 Set 类型，不是 Array 类型</span>
<span class="hljs-title class_">Object</span>.<span class="hljs-property"><span class="hljs-keyword">prototype</span></span>.<span class="hljs-property">toString</span>.<span class="hljs-title function_">call</span>(<span class="hljs-keyword">new</span> <span class="hljs-title class_">Set</span>(arr)) <span class="hljs-comment">// '[object Set]'</span>
复制代码
</code></pre><h3 id="h-filter-indexof" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法二：filter() + indexOf()</h3><pre data-type="codeBlock" text="const arr2 = arr =&gt; {
  return arr.filter((item, index) =&gt; {
    return arr.indexOf(item) === index;
  });
}
复制代码
"><code>const arr2 <span class="hljs-operator">=</span> arr <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
  <span class="hljs-keyword">return</span> arr.filter((item, index) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
    <span class="hljs-keyword">return</span> arr.indexOf(item) <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> index;
  });
}
复制代码
</code></pre><h3 id="h-new-map" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法三：new Map()</h3><pre data-type="codeBlock" text="const arr3 = arr =&gt; {
  const map = new Map();
  const res = [];
  for (let i = 0; i &lt; arr.length; i++) {
    if (!map.has(arr[i])) {
      map.set(arr[i], true)
      res.push(arr[i]);
    }
  }
  return res;
}
复制代码
"><code>const arr3 <span class="hljs-operator">=</span> arr <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
  const map <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> Map();
  const res <span class="hljs-operator">=</span> [];
  <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> arr.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
    <span class="hljs-keyword">if</span> (<span class="hljs-operator">!</span>map.has(arr[i])) {
      map.set(arr[i], <span class="hljs-literal">true</span>)
      res.<span class="hljs-built_in">push</span>(arr[i]);
    }
  }
  <span class="hljs-keyword">return</span> res;
}
复制代码
</code></pre><h3 id="h-includes" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法四：includes()</h3><pre data-type="codeBlock" text="const arr4 = arr =&gt; {
  const res = [];
  for (let i = 0; i &lt; arr.length; i++) {
    if (!res.includes(arr[i])) res.push(arr[i]);
  }
  return res;
}
复制代码
"><code>const arr4 <span class="hljs-operator">=</span> arr <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
  const res <span class="hljs-operator">=</span> [];
  <span class="hljs-keyword">for</span> (let i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> arr.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
    <span class="hljs-keyword">if</span> (<span class="hljs-operator">!</span>res.includes(arr[i])) res.<span class="hljs-built_in">push</span>(arr[i]);
  }
  <span class="hljs-keyword">return</span> res;
}
复制代码
</code></pre><h2 id="h-26" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.6 交集</h2><h3 id="h-new-set" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法一：new Set()</h3><pre data-type="codeBlock" text="const one = [0, 2, 4, 6, 8, 8]
const two = [1, 2, 3, 4, 5, 6]
const duplicated = [...new Set(one)].filter(v =&gt; two.includes(v)) // [2, 4, 6]
复制代码
"><code>const one <span class="hljs-operator">=</span> [<span class="hljs-number">0</span>, <span class="hljs-number">2</span>, <span class="hljs-number">4</span>, <span class="hljs-number">6</span>, <span class="hljs-number">8</span>, <span class="hljs-number">8</span>]
const two <span class="hljs-operator">=</span> [<span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">4</span>, <span class="hljs-number">5</span>, <span class="hljs-number">6</span>]
const duplicated <span class="hljs-operator">=</span> [...new Set(one)].filter(v <span class="hljs-operator">=</span><span class="hljs-operator">></span> two.includes(v)) <span class="hljs-comment">// [2, 4, 6]</span>
复制代码
</code></pre><h2 id="h-27" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.7 删除虚值</h2><h3 id="h-arrayprototypefilter" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法一：Array.prototype.filter()</h3><pre data-type="codeBlock" text="const arr = [0, &apos;blue&apos;, &apos;&apos;, NaN, 9, true, undefined, &apos;while&apos;, false]
const real = arr.filter(Boolean) // [&apos;blue&apos;, 9, true, &apos;while&apos;]
复制代码
"><code>const <span class="hljs-attr">arr</span> = [<span class="hljs-number">0</span>, <span class="hljs-string">'blue'</span>, <span class="hljs-string">''</span>, NaN, <span class="hljs-number">9</span>, <span class="hljs-literal">true</span>, undefined, <span class="hljs-string">'while'</span>, <span class="hljs-literal">false</span>]
const <span class="hljs-attr">real</span> = arr.filter(Boolean) // [<span class="hljs-string">'blue'</span>, <span class="hljs-number">9</span>, <span class="hljs-literal">true</span>, <span class="hljs-string">'while'</span>]
复制代码
</code></pre><h2 id="h-28" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.8 重组（变量交换）</h2><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法一：解构赋值</h3><pre data-type="codeBlock" text="arr = [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;, &apos;eee&apos;, &apos;fff&apos;]
[arr[1], arr[2]] = [arr[2], arr[1]] // [&apos;cccc&apos;, &apos;bbbb&apos;]
arr // [&apos;aaa&apos;, &apos;cccc&apos;, &apos;bbbb&apos;, &apos;dddd&apos;]

// 如果想获取单个值
[a, , , e, f] = arr
a // &apos;aaa&apos;
e // &apos;dddd&apos;
f // &apos;eee&apos;
复制代码
"><code>arr = <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>, <span class="hljs-string">'eee'</span>, <span class="hljs-string">'fff'</span>]</span>
<span class="hljs-selector-attr">[arr[1]</span>, arr<span class="hljs-selector-attr">[2]</span>] = <span class="hljs-selector-attr">[arr[2]</span>, arr<span class="hljs-selector-attr">[1]</span>] // <span class="hljs-selector-attr">[<span class="hljs-string">'cccc'</span>, <span class="hljs-string">'bbbb'</span>]</span>
arr // <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'dddd'</span>]</span>

// 如果想获取单个值
<span class="hljs-selector-attr">[a, , , e, f]</span> = arr
<span class="hljs-selector-tag">a</span> // 'aaa'
e // 'dddd'
f // 'eee'
复制代码
</code></pre><h3 id="h-arraysplice" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法二：Array.splice()</h3><pre data-type="codeBlock" text="arr = [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;, &apos;eee&apos;, &apos;fff&apos;, &apos;ggg&apos;, &apos;hhh&apos;, &apos;iii&apos;]
arr.splice(1, 3, ...arr.splice(4, 4, arr[1], arr[2], arr[3])) // [&apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]
arr // [&apos;aaa&apos;, &apos;eee&apos;, &apos;fff&apos;, &apos;ggg&apos;, &apos;hhh&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;, &apos;iii&apos;]
复制代码
"><code>arr = <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>, <span class="hljs-string">'eee'</span>, <span class="hljs-string">'fff'</span>, <span class="hljs-string">'ggg'</span>, <span class="hljs-string">'hhh'</span>, <span class="hljs-string">'iii'</span>]</span>
arr<span class="hljs-selector-class">.splice</span>(<span class="hljs-number">1</span>, <span class="hljs-number">3</span>, ..<span class="hljs-selector-class">.arr</span><span class="hljs-selector-class">.splice</span>(<span class="hljs-number">4</span>, <span class="hljs-number">4</span>, arr<span class="hljs-selector-attr">[1]</span>, arr<span class="hljs-selector-attr">[2]</span>, arr<span class="hljs-selector-attr">[3]</span>)) // <span class="hljs-selector-attr">[<span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
arr // <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'eee'</span>, <span class="hljs-string">'fff'</span>, <span class="hljs-string">'ggg'</span>, <span class="hljs-string">'hhh'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>, <span class="hljs-string">'iii'</span>]</span>
复制代码
</code></pre><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法三：引入中转变量</h3><pre data-type="codeBlock" text="temp = arr[1]
arr[1] = arr[2]
arr[2] = temp
复制代码
"><code><span class="hljs-attr">temp</span> = arr[<span class="hljs-number">1</span>]
arr<span class="hljs-section">[1]</span> = arr<span class="hljs-section">[2]</span>
arr<span class="hljs-section">[2]</span> = temp
复制代码
</code></pre><h2 id="h-29-greater" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.9 类数组 --&gt; 数组</h2><pre data-type="codeBlock" text="// 类数组（包含 length 属性，比如 arguments、DOM 操作方法返回的结果等）
const asArr = { 0: &apos;aaa&apos;, &apos;1&apos;: &apos;bbb&apos;, &apos;二&apos;: &apos;ccc&apos;, 4: &apos;eee&apos;, length: 6 }
复制代码
"><code><span class="hljs-comment">// 类数组（包含 length 属性，比如 arguments、DOM 操作方法返回的结果等）</span>
<span class="hljs-type">const</span> asArr = { <span class="hljs-number">0</span>: <span class="hljs-string">'aaa'</span>, <span class="hljs-string">'1'</span>: <span class="hljs-string">'bbb'</span>, <span class="hljs-string">'二'</span>: <span class="hljs-string">'ccc'</span>, <span class="hljs-number">4</span>: <span class="hljs-string">'eee'</span>, length: <span class="hljs-number">6</span> }
复制代码
</code></pre><h3 id="h-arrayprototypefrom" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法一：Array.prototype.from()</h3><pre data-type="codeBlock" text="Array.from(asArr)
// =&gt; [&apos;aaa&apos;, &apos;bbb&apos;, undefined, undefined, &apos;eee&apos;, undefined]
// undefined 可枚举
复制代码
"><code>Array<span class="hljs-selector-class">.from</span>(asArr)
// => <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbb'</span>, undefined, undefined, <span class="hljs-string">'eee'</span>, undefined]</span>
// undefined 可枚举
复制代码
</code></pre><h3 id="h-arrayprototypeslicecall" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法二：Array.prototype.slice.call()</h3><pre data-type="codeBlock" text="Array.prototype.slice.call(asArr)
// =&gt; [&apos;aaa&apos;, &apos;bbb&apos;, empty × 2, &apos;eee&apos;, empty]
// empty 不可枚举
复制代码
"><code>Array.prototype.slice.call(asArr)
<span class="hljs-operator">/</span><span class="hljs-operator">/</span> <span class="hljs-operator">=</span><span class="hljs-operator">></span> [<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbb'</span>, <span class="hljs-keyword">empty</span> × <span class="hljs-number">2</span>, <span class="hljs-string">'eee'</span>, <span class="hljs-keyword">empty</span>]
<span class="hljs-operator">/</span><span class="hljs-operator">/</span> <span class="hljs-keyword">empty</span> 不可枚举
复制代码
</code></pre><p>PS：其他产生 empty 的情况</p><pre data-type="codeBlock" text="// 也会产生 empty 空位，不会改变 length 属性
delete arr[2]
// 直接删掉元素，且改变 length 属性
arr.splice(2, 1)
复制代码
"><code><span class="hljs-comment">// 也会产生 empty 空位，不会改变 length 属性</span>
<span class="hljs-keyword">delete</span> arr[<span class="hljs-number">2</span>]
<span class="hljs-comment">// 直接删掉元素，且改变 length 属性</span>
arr.splice(<span class="hljs-number">2</span>, <span class="hljs-number">1</span>)
复制代码
</code></pre><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法三：扩展运算符</h3><pre data-type="codeBlock" text="[...document.querySelectorAll(&apos;div&apos;)]
复制代码
"><code>[...document.querySelectorAll(<span class="hljs-string">'div'</span>)]
复制代码
</code></pre><h2 id="h-210-greater" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.10 数组 --&gt; 对象</h2><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法一：扩展运算符</h3><pre data-type="codeBlock" text="arr = [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]
// [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]
{ ...arr }
// {0: &apos;aaa&apos;, 1: &apos;bbbb&apos;, 2: &apos;cccc&apos;, 3: &apos;dddd&apos;}
复制代码
"><code>arr = <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
// <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
{ ..<span class="hljs-selector-class">.arr</span> }
// {<span class="hljs-number">0</span>: <span class="hljs-string">'aaa'</span>, <span class="hljs-number">1</span>: <span class="hljs-string">'bbbb'</span>, <span class="hljs-number">2</span>: <span class="hljs-string">'cccc'</span>, <span class="hljs-number">3</span>: <span class="hljs-string">'dddd'</span>}
复制代码
</code></pre><h3 id="h-while" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法二：while()</h3><pre data-type="codeBlock" text="i = 0
s = {}
arr = [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]

while (arr[i]) {
    s[i] = arr[i++]
}

s // {0: &apos;aaa&apos;, 1: &apos;bbbb&apos;, 2: &apos;cccc&apos;, 3: &apos;dddd&apos;}
复制代码
"><code><span class="hljs-selector-tag">i</span> = <span class="hljs-number">0</span>
s = {}
arr = <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>

while (arr<span class="hljs-selector-attr">[i]</span>) {
    s<span class="hljs-selector-attr">[i]</span> = arr<span class="hljs-selector-attr">[i++]</span>
}

s // {<span class="hljs-number">0</span>: <span class="hljs-string">'aaa'</span>, <span class="hljs-number">1</span>: <span class="hljs-string">'bbbb'</span>, <span class="hljs-number">2</span>: <span class="hljs-string">'cccc'</span>, <span class="hljs-number">3</span>: <span class="hljs-string">'dddd'</span>}
复制代码
</code></pre><h3 id="h-objectfromentries" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法三：Object.fromEntries()</h3><pre data-type="codeBlock" text="Object.keys({name:&apos;张三&apos;,age:14}) // [&apos;name&apos;,&apos;age&apos;]
Object.values({name:&apos;张三&apos;,age:14}) // [&apos;张三&apos;,14]
Object.entries({name:&apos;张三&apos;,age:14}) // [[name,&apos;张三&apos;],[age,14]]
Object.fromEntries([name,&apos;张三&apos;],[age,14]) // ES10的api,Chrome不支持, firebox输出{name:&apos;张三&apos;,age:14}
复制代码
"><code><span class="hljs-selector-tag">Object</span><span class="hljs-selector-class">.keys</span>({name:<span class="hljs-string">'张三'</span>,age:<span class="hljs-number">14</span>}) // <span class="hljs-selector-attr">[<span class="hljs-string">'name'</span>,<span class="hljs-string">'age'</span>]</span>
<span class="hljs-selector-tag">Object</span><span class="hljs-selector-class">.values</span>({name:<span class="hljs-string">'张三'</span>,age:<span class="hljs-number">14</span>}) // <span class="hljs-selector-attr">[<span class="hljs-string">'张三'</span>,14]</span>
<span class="hljs-selector-tag">Object</span><span class="hljs-selector-class">.entries</span>({name:<span class="hljs-string">'张三'</span>,age:<span class="hljs-number">14</span>}) // <span class="hljs-selector-attr">[[name,<span class="hljs-string">'张三'</span>]</span>,<span class="hljs-selector-attr">[age,14]</span>]
<span class="hljs-selector-tag">Object</span><span class="hljs-selector-class">.fromEntries</span>(<span class="hljs-selector-attr">[name,<span class="hljs-string">'张三'</span>]</span>,<span class="hljs-selector-attr">[age,14]</span>) // ES10的api,Chrome不支持, firebox输出{name:<span class="hljs-string">'张三'</span>,age:<span class="hljs-number">14</span>}
复制代码
</code></pre><h2 id="h-211" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.11 浅拷贝</h2><h3 id="h-arrayslice" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法一：Array.slice()</h3><pre data-type="codeBlock" text="arr = [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]
arr1 = arr.slice(0)
arr[1] = 2333 // 2333
arr // [&apos;aaa&apos;, 2333, &apos;cccc&apos;, &apos;dddd&apos;]
arr1 // [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]
复制代码
"><code>arr = <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
arr1 = arr<span class="hljs-selector-class">.slice</span>(<span class="hljs-number">0</span>)
arr<span class="hljs-selector-attr">[1]</span> = <span class="hljs-number">2333</span> // <span class="hljs-number">2333</span>
arr // <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, 2333, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
arr1 // <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
复制代码
</code></pre><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法二：展开操作符</h3><pre data-type="codeBlock" text="arr = [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]
arr1 = [...arr]
arr[1] = 2333 // 2333
arr // [&apos;aaa&apos;, 2333, &apos;cccc&apos;, &apos;dddd&apos;]
arr1 // [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]
复制代码
"><code>arr = <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
arr1 = <span class="hljs-selector-attr">[...arr]</span>
arr<span class="hljs-selector-attr">[1]</span> = <span class="hljs-number">2333</span> // <span class="hljs-number">2333</span>
arr // <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, 2333, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
arr1 // <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
复制代码
</code></pre><h3 id="h-arrayconcat" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法三：Array.concat()</h3><pre data-type="codeBlock" text="arr = [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]
arr1 = [].concat(array)
arr[1] = 2333 // 2333
arr // [&apos;aaa&apos;, 2333, &apos;cccc&apos;, &apos;dddd&apos;]
arr1 // [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]
复制代码
"><code>arr = <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
arr1 = <span class="hljs-selector-attr">[]</span><span class="hljs-selector-class">.concat</span>(array)
arr<span class="hljs-selector-attr">[1]</span> = <span class="hljs-number">2333</span> // <span class="hljs-number">2333</span>
arr // <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, 2333, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
arr1 // <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
复制代码
</code></pre><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法四：直接赋值</h3><pre data-type="codeBlock" text="arr = [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]
arr1 = arr
arr[1] = 2333 // 2333
arr // [&apos;aaa&apos;, 2333, &apos;cccc&apos;, &apos;dddd&apos;]
arr1 // [&apos;aaa&apos;, 2333, &apos;cccc&apos;, &apos;dddd&apos;]
复制代码
"><code>arr = <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
arr1 = arr
arr<span class="hljs-selector-attr">[1]</span> = <span class="hljs-number">2333</span> // <span class="hljs-number">2333</span>
arr // <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, 2333, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
arr1 // <span class="hljs-selector-attr">[<span class="hljs-string">'aaa'</span>, 2333, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]</span>
复制代码
</code></pre><h2 id="h-212-arrayfrom-map" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.12 Array.from 达到 .map 的效果</h2><pre data-type="codeBlock" text="arr = [
    { name: &apos;张三&apos;, age: 18 },
    { name: &apos;李四&apos;, age: 18 },
    { name: &apos;王麻子&apos;, age: 18 },
    { name: &apos;小六&apos;, age: 18 },
]
nameMap = arr.map(v =&gt; v.name) // [&apos;张三&apos;, &apos;李四&apos;, &apos;王麻子&apos;, &apos;小六&apos;]
nameMap = Array.from(arr, ({name}) =&gt; name) // [&apos;张三&apos;, &apos;李四&apos;, &apos;王麻子&apos;, &apos;小六&apos;]
复制代码
"><code>arr <span class="hljs-operator">=</span> [
    { name: <span class="hljs-string">'张三'</span>, age: <span class="hljs-number">18</span> },
    { name: <span class="hljs-string">'李四'</span>, age: <span class="hljs-number">18</span> },
    { name: <span class="hljs-string">'王麻子'</span>, age: <span class="hljs-number">18</span> },
    { name: <span class="hljs-string">'小六'</span>, age: <span class="hljs-number">18</span> },
]
nameMap <span class="hljs-operator">=</span> arr.map(v <span class="hljs-operator">=</span><span class="hljs-operator">></span> v.<span class="hljs-built_in">name</span>) <span class="hljs-comment">// ['张三', '李四', '王麻子', '小六']</span>
nameMap <span class="hljs-operator">=</span> Array.from(arr, ({name}) <span class="hljs-operator">=</span><span class="hljs-operator">></span> name) <span class="hljs-comment">// ['张三', '李四', '王麻子', '小六']</span>
复制代码
</code></pre><h2 id="h-213-n-yuan" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.13 获取最后 n 个元素</h2><h3 id="h-arraysplice" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法一：Array.splice()</h3><pre data-type="codeBlock" text="arr = [&apos;aaa&apos;, &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;]

arr.slice().splice(-1) // [&apos;dddd&apos;]
arr.slice().splice(-3) // &apos;bbbb&apos;, &apos;cccc&apos;, &apos;dddd&apos;
复制代码
"><code>arr <span class="hljs-operator">=</span> [<span class="hljs-string">'aaa'</span>, <span class="hljs-string">'bbbb'</span>, <span class="hljs-string">'cccc'</span>, <span class="hljs-string">'dddd'</span>]

arr.slice().splice(<span class="hljs-number">-1</span>) <span class="hljs-comment">// ['dddd']</span>
arr.slice().splice(<span class="hljs-number">-3</span>) <span class="hljs-comment">// 'bbbb', 'cccc', 'dddd'</span>
复制代码
</code></pre><h2 id="h-2233" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">2.233 二维数组绘制图形</h2><h3 id="h-emmm" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">方法一：Emmm</h3><pre data-type="codeBlock" text="// Emmmm
"><code><span class="hljs-comment">// Emmmm</span>
</code></pre>]]></content:encoded>
            <author>coinwork@newsletter.paragraph.com (Jack)</author>
        </item>
        <item>
            <title><![CDATA[hello world]]></title>
            <link>https://paragraph.com/@coinwork/hello-world</link>
            <guid>o9kcwQK13uC21Csv0wed</guid>
            <pubDate>Mon, 08 Nov 2021 01:59:37 GMT</pubDate>
            <description><![CDATA[新建文章hexo new title title就是新建的文章的名字,找到生成的markdown文章进行编写发布文章推送文章推送到github清理缓存清除缓存文件 (db.json) 和已生成的静态文件 (public)。在某些情况（尤其是更换主题后），如果发现您对站点的更改无论如何也不生效，您可能需要运行该命令。]]></description>
            <content:encoded><![CDATA[<h4 id="h-" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">新建文章</h4><pre data-type="codeBlock" text="1
"><code></code></pre><pre data-type="codeBlock" text="hexo new title
"><code>hexo <span class="hljs-keyword">new</span> title
</code></pre><p>title就是新建的文章的名字,找到生成的markdown文章进行编写</p><h4 id="h-" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">发布文章</h4><pre data-type="codeBlock" text="1
"><code></code></pre><pre data-type="codeBlock" text="hexo generate
"><code></code></pre><h4 id="h-" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">推送文章</h4><pre data-type="codeBlock" text="1
"><code></code></pre><pre data-type="codeBlock" text="hexo deploy
"><code></code></pre><p>推送到github</p><h4 id="h-" class="text-xl font-header !mt-6 !mb-3 first:!mt-0 first:!mb-0">清理缓存</h4><pre data-type="codeBlock" text="1
"><code></code></pre><pre data-type="codeBlock" text="hexo clean
"><code></code></pre><p>清除缓存文件 (db.json) 和已生成的静态文件 (public)。在某些情况（尤其是更换主题后），如果发现您对站点的更改无论如何也不生效，您可能需要运行该命令。</p>]]></content:encoded>
            <author>coinwork@newsletter.paragraph.com (Jack)</author>
        </item>
    </channel>
</rss>