如果因為一些原因(通常是因為從庫中獲得的)你無法修改對象的結構,你可以遞歸地遍歷對象以找到其父對象。
function findParent(rootObject, childObject) {
if (!(rootObject && typeof rootObject === 'object')) {
return undefined;
}
if (Array.isArray(rootObject)) {
for (let i = 0; i < rootObject.length; i++) {
if (rootObject[i] === childObject) {
return rootObject;
}
const child = this.findParent(rootObject[i], childObject);
if (child) {
return child;
}
}
} else {
const keys = Object.keys(rootObject);
for (let i = 0; i < keys.length; i += 1) {
const key = keys[i];
if (rootObject[key] === childObject) {
return rootObject;
}
const child = this.findParent(rootObject[key], childObject);
if (child) {
return child;
}
}
}
return undefined;
}
const obj = {
l1: { l11: { l111: ['a', 'b', 'c'] } },
l2: { l21: ['a', 1, {}], l22: 123 },
l3: [ { l33: {} } ],
};
assert.equal(findParent(obj, obj.l1), obj);
assert.equal(findParent(obj, obj.l1.l11), obj.l1);
assert.equal(findParent(obj, obj.l2), obj);
assert.equal(findParent(obj, obj.l2.l21), obj.l2);
assert.equal(findParent(obj, obj.l2.l22), obj.l2);
assert.equal(findParent(obj, obj.l3[0]), obj.l3);
assert.equal(findParent(obj, obj.l3[0].l33), obj.l3[0]);
Window
对象。 - Andre Figueiredo