我们在日常开发过程中,往往都是抽取来直接用的,从不思考代码的底层实现逻辑,但当我开始研究一些底层的东西的时候,才开始理解了JavaScript每种方法和函数的简单实现思路,我认为这可以很好的提高我们的代码水平和逻辑思维。
简单来说,就是将多维读写转换为一维浅析浅析
具体思路见注释
let arr < span class="a543-02b7-6004-145e token 运算符">= [1 , 2, [3, 4], [5, [6, 7]]]; 函数 平(arr) { let 结果 = []; 对于 (let i = 0;< /span> i < arr.length; i< span class="9c3f-e420-1056-2a76 token 操作符">++) { < span class="2a76-63ef-a543-02b7 token comment">//判断阵列的要素为是否阵列 if (Array .isArray(arr[i])) { //如果为备份,就进行电位结果=结果。concat< span class="2a76-63ef-a543-02b7 token punctuation">(平(arr[i]))< span class="b971-a178-fc21-cc91 token punctuation">; } 其他 { //如果不是内存,直接推送到内存里面 result.推送(arr[i]); } } 返回结果; }控制台.日志(平(arr)) ; // [1,2,3,4,5,6]
具体解决办法就是恢复吞吐量,只要没有完全拍平,就一直在进行浅层化操作
let arr = [1, 2, span> [3, 4], [ 5, [6, 7]]]; 函数n 平(arr) { //主要备份元素还是多维备份,就会一直为true,一直指向拍平操作 while (arr。一些(( 项目) => 数组。isArray(item))) { arr = []。连接(... arr); console。日志(arr) ; } 返回 arr; } 控制台。日志 (平(arr))< span class="e420-1056-2a76-63ef token punctuation">;
let arr = [1, 2, < span class="b971-a178-fc21-cc91 token punctuation">[3, 4], [5, [6< /span>, 7]] ]; 函数 平(arr) { 返回 arr.减少((预, cur) => { 返回 pre。连接(数组。 span>isArray(cur) ? 平(cur) span> : cur); }, []); } 控制台。日志(平(arr));
let arr = [1, 2 , [3, 4], [5, [ 6, 7] ]]; 函数 平(arr) { 返回 arr 。toString() 。分割(',').地图((项目) => < span class="bc5f-9c3f-e420-1056 token function">数字(项目)); } 控制台。< span class="02b7-6004-145e-315c token function">日志(平 (arr)); code>
将磁盘进行浅化处理,返回一个新的磁盘,对原数据没有影响
flat()默认 仅限“拉平”楼层,如果需要“拉平”楼层的多层设备,可以将flat()方法的参数写成一个整数,表示想要拉平的层数,默认为1
使用示例
使用Infinity(无穷大)拍平
let arr = [ span>1, 2, [3, 4], [5, [6, 7]]] ; //一般计算我们要拍平几层,直接使用Infinity(无穷大)方法 < span class="315c-b971-a178-fc21 token comment">//有几层我便拍平几层 function flat(arr) { 返回 arr.平(无穷大)< span class="6004-145e-315c-b971 token punctuation">; } console。日志(平 (arr)); // [1, 2, 3, 4, 5, 6, 7]
let arr = [1, 2, [3 , 4], [5, [ 6, 7]]]; 函数 平(arr ) { //先价格 let str = JSON< span class="02b7-6004-145e-315c token punctuation">.字符串化(arr); // 将[和] 都替换为空字符串 str = str.替换(/(\ [|\])/g, ''); span> //然后再闪电加上[]就达到了一维库存 str = '[' + str + ']'; 返回 JSON span>.解析(str); } 控制台。 span>日志(平(arr)); // [1, 2, 3, 4, 5, 6, 7]
成功实现
让一个= 3, b = 1; a = a + b; b = a - b; a = a - b ; 控制台.日志(a); // 1 span> 控制台。日志(b); // 3
const dateFormat = 函数 (日期,格式< /span>) { 让 span> 年 = 日期。getFullYear();//月份加一,从0开始 让月 = 日期。getMonth() + 1; 让天=日期。getDate(); // 则替换格式 = 格式.替换(/YYYY/, 年); 格式= 格式。替换< /span>(/MM/,月); 格式 = 格式。 替换(/DD/, 天); 返回格式; } span>; 控制台。日志(日期格式(新 日期(), 'YYYY/MM/DD')); // 2023/6 /23 控制台。日志(< span class="b971-a178-fc21-cc91 token function">日期格式(新 日期(), < span class="1056-2a76-63ef-a543 token string">'YYYY年MM月DD日')); // 2023年6月23日
date对象我之前有详细讲完,大家可以看一下Date对象详解
欢迎大家讨论学习,感谢大家支持 |