簡體   English   中英

在 javascript 中同時迭代和比較兩個對象

[英]Iterate and compare two objects simultaneously in javascript

我有兩個對象obj_aobj_b ,並會比較它們的鍵。 obj_a中的鍵應該出現在obj_b中。

下面的代碼循環嵌套對象並且工作正常。 如何在循環內比較obj_b的鍵?

我不能使用像JSON.stringify(obj_a) === JSON.stringify(obj_b)這樣的其他方法,因為如果鍵匹配我需要在那里做其他事情。

var obj_a = {
    k1:"OBJ1 K1",
    k2: "OBJ1 K2",
    k3: {
        k3A: "OBJ1 K3"
    }
}

var obj_b = {
    k1:"OBJ2 K1",
    k2: "OBJ2 K2",
    k3: {
        k3A: "OBJ2 K3"
    }
}

hasKeys = function(a,b){
    iterateThrough = function(obj){
        Object.keys(obj).forEach(function(curKey){
            if(typeof obj[curKey]==='object'){
                console.log('Loop A '+curKey  )
                iterateThrough(obj[curKey]);
            } else {
                console.log('Loop B '+obj[curKey])
            } 
        });
    } 
    iterateThrough(a);
}

hasKeys(obj_a,obj_b)

只需添加第二個參數並同時遍歷b。

 var obj_a = { k1:"OBJ1 K1", k2: "OBJ1 K2", k3: { k3A: "OBJ1 K3" }, k4: "OBJ1 K4" } var obj_b = { k1:"OBJ2 K1", k2: "OBJ2 K2", k3: { k3A: "OBJ2 K3" } } hasKeys = function(a,b){ iterateThrough = function(obj,b){ Object.keys(obj).forEach(function(curKey){ // [curKey]: is object, traverse if(typeof obj[curKey]==='object' && typeof b[curKey]==='object'){ console.log('Loop A '+curKey ) iterateThrough(obj[curKey],b[curKey]); } else { if(b.hasOwnProperty(curKey)) console.log('Loop B '+obj[curKey]+' b='+b[curKey]); else console.log('b does not have this key: ' + curKey); } }); } iterateThrough(a,b); } hasKeys(obj_a,obj_b)

您可以使用JSON.stringify將其轉換為字符串,然后檢查兩個字符串中鍵的索引是否相同

 var obj_a = { k1: "OBJ1 K1", k2: "OBJ1 K2", k3: { k3A: "OBJ1 K3" } } var obj_b = { k1: "OBJ2 K1", k2: "OBJ2 K2", k3: { k3A: "OBJ2 K3" }, k3A: "OBJ2 K3" }; function checkKey(objA, ObjB, key) { key = key.toLowerCase(); const strfyA = JSON.stringify(objA).toLowerCase(); const strfyB = JSON.stringify(ObjB).toLowerCase(); console.log(strfyB.indexOf(key), strfyA.indexOf(key)); return strfyB.indexOf(key) === strfyA.indexOf(key) } console.log(checkKey(obj_a, obj_b, 'K3A'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM