如何在JavaScript中扁平化JSON数组内的指定position属性?
只扁平化JSON中的position属性解决方案
嘿,我懂你要的是什么——不想把整个JSON都拆得七零八落,就只想把每个对象里的position嵌套属性拆成顶层的lat和lng对吧?这事儿不难,咱们直接针对目标字段处理就行,不用动其他结构。
假设你的原始JSON数组存在变量data里,我给你两种常用的处理方式,按需选就行:
方式一:保留原position字段
如果还想保留原来的position嵌套结构,同时在顶层新增lat和lng,可以用下面的代码(以JavaScript为例):
const data = [ { amount:"1 teine med 110 mtr iletau", comment:"", created:"Tue May 17 2016 00:00:00 (W. Europe Standard Time)", locationDescription:"På vestsiden av Jeløya, utenfor Moss. (Oslofjorden).", position:{lat: 59.441388, lng: 10.579491}, time:"15-05-2016", type:"Teine", userId:"" }, // 其他数组元素... ]; const flattenedData = data.map(item => ({ ...item, // 展开原对象的所有属性 lat: item.position.lat, // 提取position里的lat到顶层 lng: item.position.lng // 提取position里的lng到顶层 }));
方式二:删除原position字段
要是你想彻底把position字段去掉,只保留顶层的lat和lng,可以用解构赋值来处理:
const flattenedData = data.map(({ position, ...rest }) => ({ ...rest, // 展开除了position之外的所有属性 lat: position.lat, lng: position.lng }));
更健壮的版本(兼容无position的情况)
如果数组里可能存在没有position属性的对象,为了避免报错,可以加个判断:
const flattenedData = data.map(item => { const result = { ...item }; // 只有当item存在position时才处理 if (item?.position) { result.lat = item.position.lat; result.lng = item.position.lng; // 要是想删除position,就解开下面这行注释 // delete result.position; } return result; });
这样处理完之后,你得到的新数组就只有position被扁平化了,其他字段的结构完全保持原样,完美符合你的需求~
内容的提问来源于stack exchange,提问作者Shikha
相关产品推荐
相关产品推荐

