私は、以下のfindKeyアルゴリズムを(nodejsで)拡張して、keyObjの署名と一致するツリー内の子オブジェクトのインスタンスをすべて見つけようとしています。元そのアルゴリズム:木のようなjsオブジェクトで特定の "キーオブジェクト"を持つすべての子プロパティを見つける
Object.prototype.findKey = function(keyObj) {
var p, key, val, tRet;
for (p in keyObj) {
if (keyObj.hasOwnProperty(p)) {
key = p;
val = keyObj[p];
}
}
for (p in this) {
if (p == key) {
if (this[p] == val) {
return this;
}
} else if (this[p] instanceof Object) {
if (this.hasOwnProperty(p)) {
tRet = this[p].findKey(keyObj);
if (tRet) {
return tRet;
}
}
}
}
return false;
}
すべて見つける達成ATT私の最初の素朴なattemption:次のように
Object.prototype.findAllWithKey = function(keyObject) {
let objectCopy = Object.assign({}, this);
console.log('findAll on : \n\n');
console.log(this);
let keyFound = false;
let keysFound = [];
do {
console.log("while loop iteration...");
keyFound = objectCopy.findKey(keyObject);
console.log(keyFound);
if (keyFound) {
keysFound.push(keyFound);
console.log('\n\nkey found:');
objectCopy = JSON.parse(JSON.stringify(objectCopy).replace(JSON.stringify(keyFound)+',', ''));
} else {
console.log('\n\n key not found');
keyFound = false;
}
} while (keyFound !== false);
console.log('Broke out of while loop')
};
使用量は次のとおりです。
応答オブジェクトがjsのツリー構造が含まれてい let targetObject = response.findAllWithKey({
name: 'GetStatusCode'
});
複数の子と{name: 'GetStatusCode'}を持つサブオブジェクトのインスタンスがその中にあります。
JSONのstringify/parsingが不確定であると感じているので、誰かがこれを実装するためのより良い方法を見つけるための正しい方法を指し示すことができますか?(これはいいえ、そこから最後のオブジェクトに失敗します。 findAllを達成するためのより良い方法が必要です)。
サンプル入力と対応する出力を共有できますか? – Rajesh