如何通过Object.values获取父对象属性引用并修改过滤后的对象?
怎么让过滤后的对象修改同步更新原对象?
你当前的代码其实已经能实现修改initial["w"]的效果。JavaScript里对象是引用类型,Object.values(initial)返回的是原对象属性值的引用,filter操作也不会生成新对象,所以修改filtered[0].a会直接同步到initial["w"].a。
实际运行你的代码后,initial的输出应该是这样的:
{ q: { a: 1 }, w: { a: 13 }, e: { a: 3 } }
要是你那边没得到这个结果,大概率是这两个原因:
- 代码执行时还有其他逻辑改动了
initial对象 - 你搞错了
filtered[0]对应的原属性:Object.values(initial)的顺序和对象属性枚举顺序一致,这里"w"是第二个属性,过滤后确实是filtered[0]
要是想更稳妥,避免因属性顺序出问题,可以用Object.entries保留键信息,精准操作原对象:
const initial = { "q": { a: 1}, "w": { a: 2}, "e": { a: 3}, } // 过滤时保留键和值的对应关系 const filteredEntries = Object.entries(initial).filter(([key, value]) => value.a >= 2); // 修改引用的对象,同步更新原对象 filteredEntries[0][1].a = 13; // 也可以通过键直接修改原对象,更直观 // initial[filteredEntries[0][0]].a = 13; console.log(initial);
这种方式能清楚看到你修改的是原对象的哪个键,不会因为属性顺序问题搞混。
内容的提问来源于stack exchange,提问作者zmii
相关产品推荐
相关产品推荐

