国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

一道用hasOwnProperty給數(shù)組去重的面試題

big_cat / 1817人閱讀

摘要:是中用于檢測對象是否包含某個(gè)屬性的方法,返回一個(gè)布爾值。有一個(gè)用實(shí)現(xiàn)數(shù)組去重的方法但是,如果數(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);
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/99022.html

相關(guān)文章

  • 「前端面試系列8」數(shù)組去重(10 種濃縮版)

    摘要:后面的方法中的源數(shù)組,都是指的這個(gè)。它類似于數(shù)組,但是成員的值都是唯一的,沒有重復(fù)的值。這貌似是目前看來最完美的解決方案了。所以稍加改變源數(shù)組,給兩個(gè)空對象中加入鍵值對。 showImg(https://segmentfault.com/img/bVbpfjp?w=750&h=422); 前言 這是前端面試題系列的第 8 篇,你可能錯(cuò)過了前面的篇章,可以在這里找到: JavaScri...

    zollero 評(píng)論0 收藏0
  • 前端空間 - 收藏集 - 掘金

    摘要:封裝手寫的方筆記使用檢測文件前端掘金副標(biāo)題可以做什么以及使用中會(huì)遇到的坑。目的是幫助人們用純中文指南實(shí)現(xiàn)復(fù)選框中多選功能前端掘金作者緝熙簡介是推出的一個(gè)天挑戰(zhàn)。 深入理解 JavaScript Errors 和 Stack Traces - 前端 - 掘金譯者注:本文作者是著名 JavaScript BDD 測試框架 Chai.js 源碼貢獻(xiàn)者之一,Chai.js 中會(huì)遇到很多異常處理...

    you_De 評(píng)論0 收藏0
  • 前端空間 - 收藏集 - 掘金

    摘要:封裝手寫的方筆記使用檢測文件前端掘金副標(biāo)題可以做什么以及使用中會(huì)遇到的坑。目的是幫助人們用純中文指南實(shí)現(xiàn)復(fù)選框中多選功能前端掘金作者緝熙簡介是推出的一個(gè)天挑戰(zhàn)。 深入理解 JavaScript Errors 和 Stack Traces - 前端 - 掘金譯者注:本文作者是著名 JavaScript BDD 測試框架 Chai.js 源碼貢獻(xiàn)者之一,Chai.js 中會(huì)遇到很多異常處理...

    lwx12525 評(píng)論0 收藏0
  • JS數(shù)組去重總結(jié)

    摘要:數(shù)組去重,一般會(huì)在面試的時(shí)候才會(huì)碰到,要求手寫數(shù)組去重方法的代碼。在實(shí)際項(xiàng)目中碰到的數(shù)組去重,一般都是后臺(tái)去處理,很少讓前端處理數(shù)組去重。數(shù)組去重的方法一利用去重中最常用如果不考慮兼容性,這種去重的方法代碼最少。 數(shù)組去重,一般會(huì)在面試的時(shí)候才會(huì)碰到,要求手寫數(shù)組去重方法的代碼。如果是被提問到,數(shù)組去重的方法有哪些?你能答出其中的10種,面試官很有可能對你刮目相看。 在實(shí)際項(xiàng)目中碰到的...

    whinc 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<