利用hasOwnProperty給數(shù)組去重的面試題分享
hasOwnProperty
hasOwnProperty是javascript中用于檢測對象是否包含某個(gè)屬性的方法,返回一個(gè)布爾值。
var o = { a: 1}; console.log(o.hasOwnProperty('a')); // true console.log(o.hasOwnProperty('b')); // false
有一個(gè)用hasOwnProperty實(shí)現(xiàn)數(shù)組去重的方法:
var arr = ['a', 'b', 'c', 'b']; function uniqueArr(arr){ var unique = [], temp = {}; for(var i = 0; i < arr.length; i++){ if(temp[arr[i]] === undefined){ temp[arr[i]] = 1; unique.push(arr[i]); } } return unique; }
但是,如果數(shù)組中包含引用類型的指,則此方法失效。 那么該如何判斷兩個(gè)對象是否相等呢?
我們假設(shè),如果兩個(gè)對象具有相同的keys,并且每個(gè)key對應(yīng)的value也都相等,則這兩個(gè)對象相等。
現(xiàn)在我們已經(jīng)明確了判斷規(guī)則,那么該如何實(shí)現(xiàn)呢?
var o1 = {a:1, b:2}, o2 = {b:2, a:1}, o3 = {a:2, b:1}; function isEqual(o1, o2){ var o1_keys = Object.keys(o1); var o2_keys = Object.keys(o1); if(o1_keys.length !== o2_keys.length){ return false; } o1_keys = o1_keys.sort(); o2_keys = o2_keys.sort(); if(o1_keys.join('||') !== o2_keys.join('||')){ return false; } var r = true; for(var key of o1_keys){ if( !isPrimitive(o1[key] ) && !isPrimitive( o2[key])){ if(!isEqual(o1[key], o2[key])){ r = false; break; } } else if(o1[key] !== o2[key]){ r = false; break; } } return r; function isPrimitive(v){ var type = typeof v; return type === 'number' || type === 'string' || type === 'boolean' || v === undefined || v === null; } } console.log(isEqual(o1, o2)); console.log(isEqual(o1, o3)); console.log(isEqual({a:1, b:{c:1}}, {b:{c:2}, a:1})); console.log(isEqual({a:1, b:{c:1}}, {b:{c:1}, a:1})); console.log(isEqual({a:1, b:{c:1},c:2}, {b:{c:1}, a:1})); console.log(isEqual({a:1, b:{c:1}}, {b:{c:1}, a:{b:1}})); console.log(isEqual({a:1, b:function(){}}, {b:function(){}, a:1}));
上面的代碼,我們基本上實(shí)現(xiàn)了判斷兩個(gè)對象是否相等,but?。?!,還有一點(diǎn),就是如果對象是函數(shù),怎么判斷是否相等?簡單一點(diǎn):Object.toString。
var f1 = function(){}; var f2 = function(){}; if(f1.toString() === f2.toString()){ console.log(true); }
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
- js中的hasOwnProperty和isPrototypeOf方法使用實(shí)例
- JavaScript isPrototypeOf和hasOwnProperty使用區(qū)別
- Javascript中的for in循環(huán)和hasOwnProperty結(jié)合使用
- 理解JAVASCRIPT中hasOwnProperty()的作用
- Javascript hasOwnProperty 方法 & in 關(guān)鍵字
- Javascript學(xué)習(xí)筆記之 對象篇(三) : hasOwnProperty
- js數(shù)組去重的常用方法總結(jié)
- JS實(shí)現(xiàn)數(shù)組去重方法總結(jié)(六種方法)
- js數(shù)組去重的5種算法實(shí)現(xiàn)
- JavaScript數(shù)組去重的兩種方法推薦
相關(guān)文章
JS實(shí)現(xiàn)數(shù)組扁平化的方法分享
數(shù)組扁平化指的是:將一個(gè)多層嵌套的數(shù)組,處理成只有一層的數(shù)組。本文主要和大家介紹了幾個(gè)常用的JS數(shù)組扁平化方法,希望對大家有所幫助2023-04-04解析ES6中的解構(gòu)賦值(數(shù)組,對象,嵌套,默認(rèn)值)
解構(gòu)賦值是一種特殊的語法,它使我們可以將數(shù)組或?qū)ο蟆安鸢敝烈幌盗凶兞恐?,因?yàn)橛袝r(shí)這樣更方便,接下來通過本文給大家介紹ES6中的解構(gòu)賦值(數(shù)組,對象,嵌套,默認(rèn)值),需要的朋友可以參考下2022-11-11JSON是什么?有哪些優(yōu)點(diǎn)?JSON和XML的區(qū)別?
這篇文章主要介紹了JSON是什么?有哪些優(yōu)點(diǎn)?JSON和XML的區(qū)別?下面就來詳細(xì)的介紹兩種的區(qū)別,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04iscroll動(dòng)態(tài)加載數(shù)據(jù)完美解決方法
這篇文章主要為大家詳細(xì)介紹了iscroll動(dòng)態(tài)加載數(shù)據(jù)的完美解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07微信小程序返回上一頁刷新組件數(shù)據(jù)的示例代碼
這篇文章主要介紹了微信小程序返回上一頁刷新組件數(shù)據(jù)的相關(guān)資料,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友參考下吧2024-03-03uniapp踩坑實(shí)戰(zhàn)之文件查找失敗:'uview-ui'?at?main.js解決辦法
這篇文章主要給大家介紹了關(guān)于uniapp踩坑實(shí)戰(zhàn)之文件查找失敗:'uview-ui'?at?main.js的解決辦法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12