{"id":19196452,"url":"https://github.com/lingdu2012/jsnotes","last_synced_at":"2026-01-31T22:06:28.747Z","repository":{"id":124835281,"uuid":"319979152","full_name":"lingdu2012/JSnotes","owner":"lingdu2012","description":"javascript相关代码片段笔记","archived":false,"fork":false,"pushed_at":"2021-02-03T07:35:41.000Z","size":6,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-13T23:39:36.266Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lingdu2012.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-12-09T14:19:32.000Z","updated_at":"2021-02-03T07:35:43.000Z","dependencies_parsed_at":null,"dependency_job_id":"ddfb9e29-eb60-4bb6-8bbd-515789217e5b","html_url":"https://github.com/lingdu2012/JSnotes","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lingdu2012/JSnotes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lingdu2012%2FJSnotes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lingdu2012%2FJSnotes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lingdu2012%2FJSnotes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lingdu2012%2FJSnotes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lingdu2012","download_url":"https://codeload.github.com/lingdu2012/JSnotes/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lingdu2012%2FJSnotes/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28956971,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-31T18:30:42.805Z","status":"ssl_error","status_checked_at":"2026-01-31T18:30:19.593Z","response_time":128,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-09T12:13:44.328Z","updated_at":"2026-01-31T22:06:28.727Z","avatar_url":"https://github.com/lingdu2012.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# JSnotes\n\u003e javascript相关代码片段笔记\n### 对象的深拷贝（clone）\n\u003e 注意typeof 与 intanceof 的区别\n\u003e typeof 只能返回6个字符串，即 string、Boolean、number、function、object、undefined，不能对数组或对象进行判断\n\u003e instanceof 返回true或false\n```javascript\nfunction cloneObj(obj){\n\tlet o=null;\n\tif(typeof(obj)=='object'){\n\t\tif(obj instanceof Array){\n\t\t    o=[];\n\t\t    for( let value of obj){\n\t\t\t\to.push(value);\n\t\t    }\n\t\t}else{\n\t\t\to={}\n\t\t\tfor(let key in obj){\n\t\t\t\to[key]=cloneObj(obj[key]);\n\t\t\t}\n\t\t}\n\t}else{\n\t\to=obj;\n\t}\n\treturn o;\n}\n\nlet a={ab:'hello',b:[1,2],c:{m:'nihao',n:100}};\nconsole.log(a);\n\nlet b=cloneObj(a);\nconsole.log(b);\n```\n### 冒泡排序\n\u003e 比较相邻两个数的大小，如果前一个比后一个大，则两者交换位置；\n\u003e 第一轮结束后，最后一个数是最大的；\n\u003e 以此类推，进行N轮比较，每轮最后一个数不再参与比较。\n```javascript\nfunction arraySort(arr){\n\tlet len=arr.length;\n\tfor(let m=0;m\u003clen-1;m++){\n\t   for(let n=1;n\u003clen-1-m;n++){\n\t       if(arr[n]\u003earr[n+1]){\n\t\t\t\tlet val=arr[n];\n\t\t\t\tarr[n]=arr[n+1];\n\t\t\t\tarr[n+1]=val;\n\t\t   }\n\t   }\n\t}\n\treturn arr;\n}\n\nlet testArr=[1,3,2,8,5,6];\n\nconsole.log(arraySort(testArr));\n```\n### 不使用新数组去除数组中相邻重复的数字\n\u003e 注意两个用来计数的i和count的使用\n```javascript\nfunction arrayClear(arr){ \n\tlet count = 1;\n\tlet i=1;\n\twhile(i  \u003c arr.length){\n\t\tif(arr[i] == arr[i-1]){\n\t\t  count++;\n\t\t  if(count==2) {\n\t\t\t arr.splice(i-1,1);\n\t\t\t i--;\n\t\t  }\n\t\t \n\t\t}else{\n\t\t    i++;\n\t\t\tcount=1;\n\t\t}\n\t\t\n\t}\n\t\n\treturn arr;\n}\n\nlet arr2=[1,1,2,3,3,5,6,6];\nconsole.log(arrayClear(arr2));\n```\n\u003e 利用ES6新数据结构快速去重\n```javascript\n//去重数组\nlet arr4=[1,1,2,3,3,5,6,6];\nlet newArr=[...new Set(arr4)];\nconsole.log(newArr);\n//去重字符串\nlet str=\"absbsdo\";\nlet newStr=[...new Set(str)].join(\"\");\nconsole.log(newStr);\n```\n\n### 在数组中找出两数之和等于目标数字的组合\n\u003e 找出数组中下标的组合，尽量少重复使用同一个元素\n```javascript\nfunction findNums(arr,sum){\n\tlet index=[];\n\tlet len=arr.length;\n\tfor(let i=0;i\u003clen;i++){\n\t\tfor(let j=i+1;j\u003clen;j++){\n\t\t\tif(arr[i]+arr[j]==sum){\n\t\t\t\tindex.push([i,j]);\n\t\t\t}\n\t\t}\n\t}\n\treturn index;\n}\nlet arr3=[2,7,4,6,3];\n\nconsole.log(findNums(arr3,9));\n```\n### 简单计数器\n\u003e 利用闭包函数\n```javascript\nvar add = (function () {\n    var counter = 0;\n    return function () {\n\t\treturn counter += 1;\n\t}\n})();\nconsole.log(add());\nconsole.log(add());\nconsole.log(add());\n```\n\n### 找出字符串中的最长字串\n\u003e 连续的无重复子串\n```javascript\nfunction findChildStr(str){\n\tlet arr=[...str];\n\tlet child=[];\n\tlet maxChild=[];\n\tlet maxLen=0;\n\tfor(let i=0;i\u003carr.length;i++){\n\t\tif(child.findIndex(y =\u003e y==arr[i])\u003e-1){\n\t\t\tif(child.length \u003e maxLen){\n\t\t\t\tmaxLen=child.length;\n\t\t\t\tmaxChild=child;\n\t\t\t}\n\t\t\tchild=[];\n\t\t\tchild.push(arr[i]);\n\t\t}else{\n\t\t\tchild.push(arr[i]);\n\t\t}\n\t}\n\tconsole.log(maxChild);\n\treturn maxChild.join(\"\");\n}\nlet longStr='abcabcbb';\nconsole.log(findChildStr(longStr));\n```\n\n### 通过一个方法两种方式进行求和\n\u003e arguments对象对于可以传递可变数量的参数的函数很有用\n```javascript\nfunction sum(){\n    let num = arguments[0];\n    if(arguments.length==1){\n        return function(sec){\n            return num+sec;\n        }\n    }else{\n        let num = 0;\n        for(let i = 0;i\u003carguments.length;i++){\n            num = num + arguments[i];\n        }\n    return num;\n    }\n}\nconsole.log(sum(2)(3));\nconsole.log(sum(2,3));\n```\n### 改变上下文指向\n\u003e bind，call，apply都是为了改变函数体内部 this 的指向。少量参数用call，大量参数用apply\n\u003e JavaScript的上下文分为定义时上下文，运行时上下文，其上下文是可以改变\n\u003e bind调用完成后不执行，call，apply是马上执行。相互之间是互通的，bind不兼容（IE5，6，7，8）\n```javascript\nfunction log(){\n  console.log.apply(console, arguments);\n};\nconsole.log(\"输出\");\nlog(1);    //1\nlog(1,2);    //1 2\n\nfunction log(){\n  var args = Array.prototype.slice.call(arguments);\n  var date = new Date(); \n  var tim = date.getTime(); \n  args.unshift(tim);\n  console.log.apply(console, args);\n};\n```","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flingdu2012%2Fjsnotes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flingdu2012%2Fjsnotes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flingdu2012%2Fjsnotes/lists"}