[英]How iterate in one loop for compare the two objects in javascript
[英]Iterate and compare two objects simultaneously in javascript
我有兩個對象obj_a
和obj_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.