両方の値を保持しながら、2 つのオブジェクトを一緒に圧縮する必要がある状況があります。両方のオブジェクトを反復処理して、すべてのキーの配列を作成できます。
var traverse = function (obj, chain) {
for (var prop in obj) {
if (obj.hasOwnProperty(prop)) {
var tempChain = [].concat(chain || []);
tempChain.push(prop);
if (typeof obj[prop] === 'object') {
traverse(obj[prop], tempChain);
}
console.log(tempChain);
}
}
};
以下を渡します。
traverse({
'a': {
'b': 'hello world',
'b1': 'hello world 1',
'c': {
'd': 'dello'
}
}
})
私を返します:
[a]
[a,b]
[a,b1]
[a,c]
[a, c, d]
これで、オブジェクトにネストされたプロパティの配列ができました。基本的にobj[[a、c、d]]にアクセスするにはどうすればよいですか? eval で問題を解決できることはわかっていますが、内容は信頼できません。
eval('window.' + ['a','c','d'].join('.'));
その配列をループして、プロパティが両方に存在するかどうかを確認できる場合は、結合された「圧縮された」値の新しいオブジェクトを構築します。