亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

利用hasOwnProperty給數(shù)組去重的面試題分享

 更新時間:2018年11月05日 16:20:41   作者:胡斐  
obj.hasOwnProperty(attr) 判斷是否是原型中的屬性,false就是原型中的屬性,下面這篇文章主要給大家介紹了一道利用hasOwnProperty給數(shù)組去重的面試題,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下

hasOwnProperty

hasOwnProperty是javascript中用于檢測對象是否包含某個屬性的方法,返回一個布爾值。

var o = { a: 1};
console.log(o.hasOwnProperty('a')); // true
console.log(o.hasOwnProperty('b')); // false

有一個用hasOwnProperty實現(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ù)組中包含引用類型的指,則此方法失效。 那么該如何判斷兩個對象是否相等呢?

我們假設,如果兩個對象具有相同的keys,并且每個key對應的value也都相等,則這兩個對象相等。

現(xiàn)在我們已經(jīng)明確了判斷規(guī)則,那么該如何實現(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}));

上面的代碼,我們基本上實現(xiàn)了判斷兩個對象是否相等,but?。。?,還有一點,就是如果對象是函數(shù),怎么判斷是否相等?簡單一點:Object.toString。

var f1 = function(){};
var f2 = function(){};

if(f1.toString() === f2.toString()){
 console.log(true);
}

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關文章

  • JS實現(xiàn)數(shù)組扁平化的方法分享

    JS實現(xiàn)數(shù)組扁平化的方法分享

    數(shù)組扁平化指的是:將一個多層嵌套的數(shù)組,處理成只有一層的數(shù)組。本文主要和大家介紹了幾個常用的JS數(shù)組扁平化方法,希望對大家有所幫助
    2023-04-04
  • 解析ES6中的解構賦值(數(shù)組,對象,嵌套,默認值)

    解析ES6中的解構賦值(數(shù)組,對象,嵌套,默認值)

    解構賦值是一種特殊的語法,它使我們可以將數(shù)組或?qū)ο蟆安鸢敝烈幌盗凶兞恐?,因為有時這樣更方便,接下來通過本文給大家介紹ES6中的解構賦值(數(shù)組,對象,嵌套,默認值),需要的朋友可以參考下
    2022-11-11
  • JSON是什么?有哪些優(yōu)點?JSON和XML的區(qū)別?

    JSON是什么?有哪些優(yōu)點?JSON和XML的區(qū)別?

    這篇文章主要介紹了JSON是什么?有哪些優(yōu)點?JSON和XML的區(qū)別?下面就來詳細的介紹兩種的區(qū)別,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-04-04
  • iscroll動態(tài)加載數(shù)據(jù)完美解決方法

    iscroll動態(tài)加載數(shù)據(jù)完美解決方法

    這篇文章主要為大家詳細介紹了iscroll動態(tài)加載數(shù)據(jù)的完美解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • 微信小程序返回上一頁刷新組件數(shù)據(jù)的示例代碼

    微信小程序返回上一頁刷新組件數(shù)據(jù)的示例代碼

    這篇文章主要介紹了微信小程序返回上一頁刷新組件數(shù)據(jù)的相關資料,本文通過實例代碼給大家介紹的非常詳細,需要的朋友參考下吧
    2024-03-03
  • 微信小程序?qū)崿F(xiàn)五子棋游戲

    微信小程序?qū)崿F(xiàn)五子棋游戲

    這篇文章主要為大家詳細介紹了微信小程序?qū)崿F(xiàn)五子棋游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • uniapp踩坑實戰(zhàn)之文件查找失敗:'uview-ui'?at?main.js解決辦法

    uniapp踩坑實戰(zhàn)之文件查找失敗:'uview-ui'?at?main.js解決辦法

    這篇文章主要給大家介紹了關于uniapp踩坑實戰(zhàn)之文件查找失敗:'uview-ui'?at?main.js的解決辦法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-12-12
  • 封裝屬于自己的JS組件

    封裝屬于自己的JS組件

    這篇文章主要介紹了如何封裝屬于自己的JS組件,對js組件擴展以及封裝用法的認識和總結(jié),感興趣的小伙伴們可以參考一下
    2016-01-01
  • 深入理解Promise.all

    深入理解Promise.all

    這篇文章主要介紹了深入理解Promise.all,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-08-08
  • es6 symbol的實現(xiàn)方法示例

    es6 symbol的實現(xiàn)方法示例

    這篇文章主要介紹了es6 symbol的實現(xiàn)方法示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04

最新評論