gpt4 book ai didi

javascript - 将两个对象与多个 Node 组合起来 - 为什么这段代码可以工作?

转载 作者:行者123 更新时间:2023-12-03 07:58:48 24 4
gpt4 key购买 nike

我有一个用于存储多个值/对象的对象,并且我希望仅当当前 Node 不存在于存储对象中时才能够添加值/Node (我不希望“i”值将覆盖“data.pageData”中的数据集 - 示例中的 value1、value2 和 value3)。我不知道要添加的 Node 有多深,因此代码必须处理无限数量的对象级别。这是我写的,它的工作原理就像我需要它一样,但我不确定为什么。

我不明白为什么最后返回data.pageData是得到返回的两级或三级深度对象。我认为封装会阻止返回值。

var data = {
pageData: {
value1: true,
value2: 'not an empty string',
other: {
value3: false
}
}
};

var i = {
value1: false,
value2: '',
other: {
value3: true,
value4: {
value5: true
},
value6: 100
}
};

init('pageData', i);
console.log(JSON.stringify(data));

function init(name, input) {
if (typeof input !== 'object') {
console.error('expected input as an object.');
return;
}

var transverseObj = function(i, d) {
for (var prop in i) {
if (i.hasOwnProperty(prop)) {
if (typeof i[prop] === 'object' && typeof d[prop] !== 'undefined') transverseObj.call(transverseObj(i[prop], d[prop]));
if (typeof d[prop] === 'undefined') d[prop] = i[prop];
}
}
return d;
};

//// Check if the storage object is undefined, otherwise run through the object(s)
data[name] = typeof data[name] === 'undefined' ? input : transverseObj(i, data[name]);
}

最佳答案

您的代码之所以有效,是因为您在递归调用中传递了对象图 Node 的直接引用 - 即,您正在就地改变目标对象,而不是返回新对象。

关于javascript - 将两个对象与多个 Node 组合起来 - 为什么这段代码可以工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34682949/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com