示例中的代码工作正常,但在我的代码中却没有
我正在尝试使用新属性更新对象
const overrides = {paths:{"/":{}}}
const aItems = [{endpoint:"/test"}]
const mockOverrides = JSON.parse(JSON.stringify(overrides));
aItems.forEach(({endpoint}) => {
if (!mockOverrides.paths[endpoint]) {
mockOverrides.paths[endpoint] = {};
}
console.log(mockOverrides); // result {paths:{"/":{}}} expected {paths:{"/":{}, "/test":{}}}
console.log(mockOverrides.paths[endpoint]) // result is {} twice
})
如您所见,该属性未显示在输出中 但不知何故存在为什么会发生这种情况?
答案 0 :(得分:0)
在 )
方法的末尾添加 foreach
后,它似乎工作正常:
const overrides = {paths:{"/":{}}}
const aItems = [{endpoint:"/test"}]
const mockOverrides = JSON.parse(JSON.stringify(overrides));
aItems.forEach(({endpoint}) => {
if (!mockOverrides.paths[endpoint]) {
mockOverrides.paths[endpoint] = {};
}
console.log(mockOverrides); // result {paths:{"/":{}}} expected {paths:{"/":{}, "/test":{}}}
console.log(mockOverrides.paths[endpoint]) // result is {} twice
});
答案 1 :(得分:0)
是的。我写了,但它被删除了。你错过了 )
。除此之外,代码很好。
答案 2 :(得分:0)
可能是因为新属性设置为 __proto__
of mockOverrides.paths
您可以通过在 chrome 控制台上运行以下代码来重现它(也可以从上面的引用中获得)
var Person=function (name) {
this.Fname=name;
this.health=100;
};
var Mateen=new Person("Mateen");
console.log(Mateen);
// result: { Fname: 'Mateen', health: 100 }
Person.prototype.level=1;
console.log(Mateen);
// result: { Fname: 'Mateen', health: 100 }
console.log(Mateen.level);
// result: 1