摘要:文章中如果有錯誤或者有更好的解法,請多多指出。它類似于數(shù)組,但是成員的值都是唯一的,沒有重復(fù)的值。
文章中如果有錯誤或者有更好的解法,請多多指出。
1.字符串去重
思路:(1)利用對象key值唯一性
function unique(str){ var _obj=str.split(""); var length=str.length; var result=""; var obj={}; for(var i=0;i(2)方法2 利用Set (謝謝道友們的分享)
ES6提供了新的數(shù)據(jù)結(jié)構(gòu)Set。它類似于數(shù)組,但是成員的值都是唯一的,沒有重復(fù)的值。const unique = str => [...new Set(str.split(""))].join(""); var str="oooooooooooopppppppppppppollllllllllsssssssss" console.log(unique(str)) // opls2.查找出在字符串中只出現(xiàn)一次的第一個字符
舉例-str="pppwrtto" ===> 輸出 w
思路:
1.str去重 [p,w,r,t,o] 同時將字符出現(xiàn)的次數(shù)記錄下來,組成如下結(jié)構(gòu)
{p:3,w:1,r:1,t:2,o:1}
2.判斷當(dāng)?shù)谝淮蝟bj[key]==1的時候就返回key值function firstUnique(str){ var arr=str.split(""); var length=arr.length; var obj={}; var num=0; for(var i=0;i3.封裝typeof(重點(diǎn)區(qū)分 引用值---1.數(shù)組,2.對象,3.包裝類)
思路:1.區(qū)分原始值 引用值 2.原始值 引用值function type(target){ //原始值 引用值 //區(qū)分引用值 var template={ "[object Array]":"array", "[object Object]":"object", "[object Number]":"number-object", "[object Boolean]":"boolean-object", "[object String]":"string-object" } if(target===null){ return "null"; }else if(typeof(target)=="object"){ // 數(shù)組 // 對象 // 包裝類 Object.prototype.toString var str=Object.prototype.toString.call(target); return template[str]; }else{ return typeof(target) } } console.log(type("abc")) console.log(type(function(){})) console.log(type([])) console.log(type({})) console.log(type(new Number())) console.log(type(new Object())) console.log(type(new String())) console.log(type(new Boolean())) console.log(type(new Array()))4.數(shù)組去重--在原型鏈上進(jìn)行
var arr=[1,1,2,2,"a","a"]
arr.unique-->[1,2,a]
思路:通過對象 hash方式Array.prototype.unique=function(){ var obj={}; var result=[]; var length=this.length; for(var i=0;i function distinct(ary){ var obj={}; for(var i=0;i5.Js實現(xiàn)方法連續(xù)調(diào)用
var demo={ smoke:function(){ console.log("吸煙") return this; }, eat:function(){ console.log("吃飯") return this; }, perm:function() { console.log("燙頭") return this; } } demo.smoke().eat().perm()6.低耦合寫出階乘函數(shù)
--消除緊密耦合的現(xiàn)象,可以像下面這樣使用 arguments.callee(嚴(yán)格模式下callee失效)function factorial(num){ if(num<=1){ return 1; }else{ return num*arguments.callee(num-1) } } console.log(factorial(3))7.&&與||運(yùn)算符
var a=1&&2; //&& 如果第一個表達(dá)式為真,將返回第二個表達(dá)式值返回 console.log(a); var b=1&&2+2; console.log(b); var c=0&&2; //&& 如果第一個表達(dá)式為假,將返回第一個表達(dá)式值返回 console.log(c) var d=1||2;//|| 第一個表達(dá)式為真,則直接返回 console.log(d) var e=0||2;//|| 第一個表達(dá)式為假,則返回第二個值 console.log(e) 2>1&&document.write("hello"); var data; data&&console.log("ni hao")8.淺拷貝
我們知道引用類型的賦值其實是改變了變量的指向,那么如果在需要拷貝的對象中存在某個屬性的值是引用類型,如數(shù)組或子對象,那么淺拷貝后的原對象的屬性獲得的也只是這個指向。所以如果改變被拷貝對象的屬性值,那么原對象的相應(yīng)屬性也會跟著改變
function extendCopy(p) { var c = {}; for (var i in p) { c[i] = p[i]; } c.uber = p; return c; }9.深拷貝
遞歸function deepCopy(p, c) { var c = c || {}; for (var i in p) { if (typeof p[i] === "object") { c[i] = (p[i].constructor === Array) ? [] : {}; deepCopy(p[i], c[i]); } else { c[i] = p[i]; } } return c; } var chinese={ nation:"中國", minzu:{name1:"漢族",name2:"苗族"} } var Doctor = deepCopy(Chinese);數(shù)組&對象深拷貝
function deepCopy(origin) { if (typeof origin != "object") { return origin; } var result; if(Object.prototype.toString.call(origin)=== "[object Array]"){ result=[]; for(var i in origin){ result[i]= typeof origin[i]==="object"?deepCopy(origin[i]):origin[i]; } }else{ result={}; for (var key in origin) { if(origin.hasOwnProperty(key)){ result[key]= typeof origin[key]==="object"?deepCopy(origin[key]):origin[key]; } } } return result; } var obj1={ name:"小黃", sister:{name:"花花",age:20}, grade:[10,20,30,[89,60]] }; var obj2=deepCopy(obj1)10.函數(shù)預(yù)編譯 GO與AO
最終
GO{a:100, demo:function(){}, f:123}
AO{e:2, b:undefined, a:10}
a=100; function demo(e){ function e(){} arguments[0]=2; console.log(e); //2 if(a){ var b=123; } a=10; var a; console.log(b);//undefined f=123; console.log(a);//10 } var a; demo(1); console.log(a); //100 console.log(f); //12311.將 var obj={value0:"1",remark0:"備注1",value1:"2",remark1:"備注2"}; 轉(zhuǎn)換為[{value0:"1",remark0:"備注1"},{value1:"2",remark1:"備注2"}]
var obj={value0:"1",remark0:"備注1",value1:"2",remark1:"備注2"}; var count=0; var result=[]; var storage={}; for(var key in obj){ count++; storage[key]=obj[key] if(count%2==0){ result[count/2-1]=storage; storage={}; } } console.log(result);12.輸入一個整形數(shù)組,數(shù)組中有正數(shù)也有負(fù)數(shù),數(shù)組中連續(xù)的一個或多個數(shù)組組成一個子數(shù)組,每個子數(shù)組都有一個和,求所有子數(shù)組和的最大值。
var s=[20,[1,2,10],[-2,30,[-1,-1,-8]]]; function max(origin){ var length=origin.length; var array=[] for(var i=0;i13、call原理以及面試題
原理:Function.prototype.call=function call(context){ //native code //把指定函數(shù)中的this指向context =>也就是fn this改變 -------[把this(call中的this)中的this指向context] //把指定函數(shù)執(zhí)行 fn執(zhí)行---- [this執(zhí)行] this() } //以下都是讓call方法執(zhí)行 //fn.call(opp) //call方法中的this 是fn //fn.__proto__.call(); //call方法中的this是fn.__proto__ //Function.prototype.call(); //call this=>Function.prototype題目:
function fn1(){ console.log(1); } function fn2(){ console.log(2) } fn1.call(fn2); //fn1.call :fn1這個Function的實例通過__proto__找到Function.prototype上的call方法,然后讓call方法執(zhí)行(傳遞fn2這個實參) //執(zhí)行call的時候,call中的this:fn1,所此處是把fn1執(zhí)行,讓fn1中的this執(zhí)行fn2 fn1.call.call.call(fn2); //f1.call.call.call 依然是找到原型上的call方法并且讓call執(zhí)行。 // call3中的this:fn1.call.call[原型上的call] // call3中的Context:fn2 // 1. 讓【原型中的call(fn1.call.call)】中的this指向fn2 // 2. 讓[原型上的call(fn1.call.call)]執(zhí)行 // -1、第二次執(zhí)行原型上的call,只不過此時的call已經(jīng)變?yōu)榱薴n2 // -2、讓指定函數(shù)fn2中的this指向undefined // -3、讓fn2執(zhí)行 Function.prototype.call(fn2); // 找到原型上的call方法,讓call執(zhí)行 // call執(zhí)行: // this:Function.prototype // context:fn2 // // 把Functon.prototype中的this關(guān)鍵字變?yōu)閒n2 // 讓Function.prototype執(zhí)行 // ==>無輸出(匿名空函數(shù)執(zhí)行無輸出) Function.prototype.call.call.call(fn2); // 等價于 fn1.call.call.call(fn2)14、阿里面試題目
function Foo(){ getName=function(){ console.log(1) }; return this; } Foo.getName=function(){ console.log(2); } Foo.prototype.getName=function(){ console.log(3) } var getName=function(){ console.log(4) } function getName(){ console.log(5) } Foo.getName() //把Foo作為對象,找其私有屬性 getName();// 執(zhí)行全局下的getName Foo().getName(); //先將Foo作為普通函數(shù)執(zhí)行,然后在調(diào)取getName getName(); new Foo.getName()//先獲取Foo.getName的值(假設(shè)B),然后在new B()相當(dāng)于創(chuàng)建B的實例 new Foo().getName() //先new Foo() 獲取實例(new Foo()相當(dāng)于將Foo函數(shù)有重新執(zhí)行了一遍,此時getName->1),把得到的實例再調(diào)取getName new new Foo().getName();//=>var f=new Foo() new f.getName() =>[new (f.getName)]()15、數(shù)組去重《鏈?zhǔn)綄懛ā?/p>
Array.prototype.myDistinct=function myDistinct(){ var obj={}; for (var i = 0; i < this.length; i++) { var item=this[i]; if(typeof obj[item]!=="undefined"){ this[i]=this[this.length-1]; this.length-1; i--; continue; } obj[item]=item; } obj=null; return this; } var ary=[1,2,3,4,1,2,44,3] ary.myDistinct(); ayy.myDistinct.sort();16.閉包、作用域、變量提升
var num=1, obj={ num:2, fn:(function(num){ this.num*=2; num+=2; return function(){ this.num*=3; num++; console.log(num) } })(num) } var fn=obj.fn; fn(); obj.fn(); console.log(num,obj.num)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/93477.html
摘要:收集的一些前端面試題從面試題發(fā)現(xiàn)不足,進(jìn)而查漏補(bǔ)缺,比通過面試更難得及各大互聯(lián)網(wǎng)公司前端筆試面試題篇及各大互聯(lián)網(wǎng)公司前端筆試面試題篇面試題個和個經(jīng)典面試題前端開發(fā)面試題如何面試前端工程師很重要個變態(tài)題解析如何通過餓了么面試輕 收集的一些前端面試題 從面試題發(fā)現(xiàn)不足,進(jìn)而查漏補(bǔ)缺,比通過面試更難得 1 BAT及各大互聯(lián)網(wǎng)公司2014前端筆試面試題--Html,Css篇 2 BAT...
摘要:收集的一些前端面試題從面試題發(fā)現(xiàn)不足,進(jìn)而查漏補(bǔ)缺,比通過面試更難得及各大互聯(lián)網(wǎng)公司前端筆試面試題篇及各大互聯(lián)網(wǎng)公司前端筆試面試題篇面試題個和個經(jīng)典面試題前端開發(fā)面試題如何面試前端工程師很重要個變態(tài)題解析如何通過餓了么面試輕 收集的一些前端面試題 從面試題發(fā)現(xiàn)不足,進(jìn)而查漏補(bǔ)缺,比通過面試更難得 1 BAT及各大互聯(lián)網(wǎng)公司2014前端筆試面試題--Html,Css篇 2 BAT...
摘要:獲取的對象范圍方法獲取的是最終應(yīng)用在元素上的所有屬性對象即使沒有代碼,也會把默認(rèn)的祖宗八代都顯示出來而只能獲取元素屬性中的樣式。因此對于一個光禿禿的元素,方法返回對象中屬性值如果有就是據(jù)我測試不同環(huán)境結(jié)果可能有差異而就是。 花了很長時間整理的前端面試資源,喜歡請大家不要吝嗇star~ 別只收藏,點(diǎn)個贊,點(diǎn)個star再走哈~ 持續(xù)更新中……,可以關(guān)注下github 項目地址 https:...
摘要:手冊網(wǎng)超級有用的前端基礎(chǔ)技術(shù)面試問題收集前端面試題目及答案匯總史上最全前端面試題含答案常見前端面試題及答案經(jīng)典面試題及答案精選總結(jié)前端面試過程中最容易出現(xiàn)的問題前端面試題整理騰訊前端面試經(jīng)驗前端基礎(chǔ)面試題部分最新前端面試題攻略前端面試前端入 手冊網(wǎng):http://www.shouce.ren/post/index 超級有用的前端基礎(chǔ)技術(shù)面試問題收集:http://www.codec...
摘要:手冊網(wǎng)超級有用的前端基礎(chǔ)技術(shù)面試問題收集前端面試題目及答案匯總史上最全前端面試題含答案常見前端面試題及答案經(jīng)典面試題及答案精選總結(jié)前端面試過程中最容易出現(xiàn)的問題前端面試題整理騰訊前端面試經(jīng)驗前端基礎(chǔ)面試題部分最新前端面試題攻略前端面試前端入 手冊網(wǎng):http://www.shouce.ren/post/index 超級有用的前端基礎(chǔ)技術(shù)面試問題收集:http://www.codec...
閱讀 2397·2021-10-09 09:44
閱讀 2132·2021-10-08 10:05
閱讀 3424·2021-07-26 23:38
閱讀 2991·2019-08-28 18:16
閱讀 812·2019-08-26 11:55
閱讀 1821·2019-08-23 18:29
閱讀 2035·2019-08-23 18:05
閱讀 1364·2019-08-23 17:02