JS中如何解决JSON对象重复键覆盖,获取首个that属性值?
为啥你拿到的总是third?问题出在这!
嘿,我一眼就看出问题在哪了——JavaScript里的对象根本不允许有重复的属性名!你写的每个data里的对象都重复定义了两次"that",浏览器或者JS引擎在解析这个对象的时候,后面那个"that":"third"直接把前面的"that":"second"给覆盖掉了,所以不管你怎么循环、怎么取值,拿到的只能是最后剩下的third。
怎么改成你想要的效果?
给你两种靠谱的解决办法:
1. 调整数据源结构(最推荐)
如果能改数据源的话,把重复的that改成数组形式,这样就能把second和third都存下来,然后取第一个元素就好:
var data = [ { "this":"first", "that":["second", "third"] }, { "this":"first", "that":["second", "third"] } ]; data.forEach(function (value) { console.log(value.that[0]); // 这里直接用value就行,不用data[i],更简洁 });
这样运行后就会输出你想要的second second啦。
2. 要是没法改数据源?(真不建议这么干)
如果数据源是别人给的,完全没法修改,那其实没办法——因为当JS解析那个带重复属性的对象时,前面的that已经被丢弃了,压根没存在过。硬要折腾的话,只能换一种方式去解析原始的JSON字符串(如果数据源是JSON的话),比如用正则去提取第一个that的值,但这种方式很脆弱,万一JSON格式变了就失效了,所以真心不推荐。
总之,核心问题就是对象重复属性被覆盖,先把数据源的结构改对,一切就都顺了~
内容的提问来源于stack exchange,提问作者Joe Berg




