结构化取值太复杂了!

谁用了我的英文名 2016-02-27 09:54:34
数据结构嵌套太多的时候,取值简直麻烦死了!


所以我要定义一套扁平化取值规范!

定义,若:
var a = {
b:[{c:{field1,field2}},{c:{field1,field2}},{c:{field1,field2}}]
}
则:
a.b.c =
[{field1,field2},{field1,field2},{field1,field2}]

大家帮忙看看能给谁反映这个问题啊!!!
...全文
150 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 1 楼 Q80470101 的回复:
上面的例子是你说的复杂的结构化取值?
本宝宝表述不清出这一定是因为星座的原因 上面是定义的一个简单地js对象,其中field1,field2表示这个属性就到底了,不往下写了。 正常来说如果想要遍历出这个串的值,必须这样做: for(var m in a.b) { console.log(m.c.field1); console.log(m.c.field2); } 但是这只是一层的情况,假如我要寻找的更深,这里就得写成: for(var m in a.b) { console.log(m.c.d.e.f.g.field1); console.log(m.c.d.e.f.g.field2); } 究其原因,仅仅是因为这个数组存在的位置 a.b是一个数组,我们却要获取b.c.d.e.f.g下面的属性 扁平化取值的意思是,直接这样用: for(var m in a.b.c.d.e.f.g) { console.log(m.field1); console.log(m.field2); } 虽然说一个数组下面不可能有c这个属性,但数组的元素下有这个属性,因此完全有理由做这样一个兼容,直接将元素下的属性拼成一个List返回给遍历表达式 免得循环遍历过程中填写太多毫无意义的中间量!
家里敷泥呀 2016-02-27
  • 打赏
  • 举报
回复
上面的例子是你说的复杂的结构化取值?
  • 打赏
  • 举报
回复
引用 9 楼 scmod 的回复:
循环下取出来很复杂吗?没感觉啊..
是循环完了之后还要用那么多层标签去找那个值
scmod 2016-02-27
  • 打赏
  • 举报
回复
循环下取出来很复杂吗?没感觉啊..
家里敷泥呀 2016-02-27
  • 打赏
  • 举报
回复
引用 7 楼 qq_26946497 的回复:
[quote=引用 6 楼 qq_26946497 的回复:] [quote=引用 5 楼 Q80470101 的回复:] 那也行啊,你自己定义一个函数,一层层递归,发现值了就取出来,也ok。 做个通用的,任何object都能深层递归的。
自己写的函数的话,格式不好看,能从语法级别予以支持才开心=_= 之前有一个编写了一半的规则翻译器,就是在微语法的级别支持这种操作。[/quote] 哎呀!不该说出来的!因为那个东西只做了一点点,仅仅足够翻译Json串,效率还渣渣。。。[/quote] 我已一年多不写js,细节的语法早忘了。 不过这个功能是可实现的。你自己多琢磨琢磨。
  • 打赏
  • 举报
回复
引用 6 楼 qq_26946497 的回复:
[quote=引用 5 楼 Q80470101 的回复:] 那也行啊,你自己定义一个函数,一层层递归,发现值了就取出来,也ok。 做个通用的,任何object都能深层递归的。
自己写的函数的话,格式不好看,能从语法级别予以支持才开心=_= 之前有一个编写了一半的规则翻译器,就是在微语法的级别支持这种操作。[/quote] 哎呀!不该说出来的!因为那个东西只做了一点点,仅仅足够翻译Json串,效率还渣渣。。。
  • 打赏
  • 举报
回复
引用 5 楼 Q80470101 的回复:
那也行啊,你自己定义一个函数,一层层递归,发现值了就取出来,也ok。 做个通用的,任何object都能深层递归的。
自己写的函数的话,格式不好看,能从语法级别予以支持才开心=_= 之前有一个编写了一半的规则翻译器,就是在微语法的级别支持这种操作。
家里敷泥呀 2016-02-27
  • 打赏
  • 举报
回复
引用 4 楼 qq_26946497 的回复:
[quote=引用 3 楼 Q80470101 的回复:] [quote=引用 2 楼 qq_26946497 的回复:] [quote=引用 1 楼 Q80470101 的回复:] 上面的例子是你说的复杂的结构化取值?
本宝宝表述不清出这一定是因为星座的原因 上面是定义的一个简单地js对象,其中field1,field2表示这个属性就到底了,不往下写了。 正常来说如果想要遍历出这个串的值,必须这样做: for(var m in a.b) { console.log(m.c.field1); console.log(m.c.field2); } 但是这只是一层的情况,假如我要寻找的更深,这里就得写成: for(var m in a.b) { console.log(m.c.d.e.f.g.field1); console.log(m.c.d.e.f.g.field2); } 究其原因,仅仅是因为这个数组存在的位置 a.b是一个数组,我们却要获取b.c.d.e.f.g下面的属性 扁平化取值的意思是,直接这样用: for(var m in a.b.c.d.e.f.g) { console.log(m.field1); console.log(m.field2); } 虽然说一个数组下面不可能有c这个属性,但数组的元素下有这个属性,因此完全有理由做这样一个兼容,直接将元素下的属性拼成一个List返回给遍历表达式 免得循环遍历过程中填写太多毫无意义的中间量![/quote] 朋友,数据的存储格式是取决于数据本身的逻辑结构的。 如果你需要用多层级的结果去表达多层级的含义,那就需要多层级的存储,例如我们常看到的图书的分类结果,一层层递进。 如果你要表示你买了多少图书,那么用一级存储就ok了。 数据的存储格式是取决于数据本身的逻辑结构的。 [/quote] 所以数据的存储格式有这么多的讲究,当然不能随便改动~! 所以才要在"取用数据"的时候做文章啊![/quote] 那也行啊,你自己定义一个函数,一层层递归,发现值了就取出来,也ok。 做个通用的,任何object都能深层递归的。
  • 打赏
  • 举报
回复
引用 3 楼 Q80470101 的回复:
[quote=引用 2 楼 qq_26946497 的回复:] [quote=引用 1 楼 Q80470101 的回复:] 上面的例子是你说的复杂的结构化取值?
本宝宝表述不清出这一定是因为星座的原因 上面是定义的一个简单地js对象,其中field1,field2表示这个属性就到底了,不往下写了。 正常来说如果想要遍历出这个串的值,必须这样做: for(var m in a.b) { console.log(m.c.field1); console.log(m.c.field2); } 但是这只是一层的情况,假如我要寻找的更深,这里就得写成: for(var m in a.b) { console.log(m.c.d.e.f.g.field1); console.log(m.c.d.e.f.g.field2); } 究其原因,仅仅是因为这个数组存在的位置 a.b是一个数组,我们却要获取b.c.d.e.f.g下面的属性 扁平化取值的意思是,直接这样用: for(var m in a.b.c.d.e.f.g) { console.log(m.field1); console.log(m.field2); } 虽然说一个数组下面不可能有c这个属性,但数组的元素下有这个属性,因此完全有理由做这样一个兼容,直接将元素下的属性拼成一个List返回给遍历表达式 免得循环遍历过程中填写太多毫无意义的中间量![/quote] 朋友,数据的存储格式是取决于数据本身的逻辑结构的。 如果你需要用多层级的结果去表达多层级的含义,那就需要多层级的存储,例如我们常看到的图书的分类结果,一层层递进。 如果你要表示你买了多少图书,那么用一级存储就ok了。 数据的存储格式是取决于数据本身的逻辑结构的。 [/quote] 所以数据的存储格式有这么多的讲究,当然不能随便改动~! 所以才要在"取用数据"的时候做文章啊!
家里敷泥呀 2016-02-27
  • 打赏
  • 举报
回复
引用 2 楼 qq_26946497 的回复:
[quote=引用 1 楼 Q80470101 的回复:] 上面的例子是你说的复杂的结构化取值?
本宝宝表述不清出这一定是因为星座的原因 上面是定义的一个简单地js对象,其中field1,field2表示这个属性就到底了,不往下写了。 正常来说如果想要遍历出这个串的值,必须这样做: for(var m in a.b) { console.log(m.c.field1); console.log(m.c.field2); } 但是这只是一层的情况,假如我要寻找的更深,这里就得写成: for(var m in a.b) { console.log(m.c.d.e.f.g.field1); console.log(m.c.d.e.f.g.field2); } 究其原因,仅仅是因为这个数组存在的位置 a.b是一个数组,我们却要获取b.c.d.e.f.g下面的属性 扁平化取值的意思是,直接这样用: for(var m in a.b.c.d.e.f.g) { console.log(m.field1); console.log(m.field2); } 虽然说一个数组下面不可能有c这个属性,但数组的元素下有这个属性,因此完全有理由做这样一个兼容,直接将元素下的属性拼成一个List返回给遍历表达式 免得循环遍历过程中填写太多毫无意义的中间量![/quote] 朋友,数据的存储格式是取决于数据本身的逻辑结构的。 如果你需要用多层级的结果去表达多层级的含义,那就需要多层级的存储,例如我们常看到的图书的分类结果,一层层递进。 如果你要表示你买了多少图书,那么用一级存储就ok了。 数据的存储格式是取决于数据本身的逻辑结构的。

50,549

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧