Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

对象重组方案

  有时候我们会需要对一个对象进行重组,或者对多个对象进行合并。遇到这种情况一般都是手动写代码,比如从某个对象取出某部分放到另一个对象的某个地方,又或者遍历数组,取出里面对象的某个属性,组合成另一个数组再放到某个对象上。这类问题有没有一个通用的解决方案呢?
  其实这涉及到一个 JSON 对象搜索的问题。比如 XML 树可以使用 XPath 来快速搜索出目标,JSON 呢?目前有一套并不是规范的 JSONPath 方案,它学习了 XPath 的思想,我个人是比较喜欢的。另外还有通过 CSS 选择器来搜索等各种方案,这里就不纠结了。
  无论怎么搜索 JSON,还会遇到一个单复数的问题。这就是为什么要设计出 querySelect 和 querySelectAll 这两个方法了。选择器本身并不适合描述单复数,需要有选择器之外的东西来描述。在 DOM 的选择器搜索上,这个「选择器之外的东西」就体现在了方法名上。
  如果解决了这两个问题,我们只要有一个对象模板就可以完成任意的对象重组了。比如我的设计是在模板对象上 @ 开头的 key 表示单数搜索,@@ 的 key 表示复数搜索。于是可以有: let a = { name: 'hehe' }; let b = [ { id: 1 }, { id: 2 } ]; let temp = { '@name': '$.name', '@@ids': '$..id' }; let result = refactor(temp, a, b); /** { name: 'hehe', ids: [ 1, 2 ] } **/   至于这个 refactor,其实实现并不困难。只不过依赖了个 JSONPath 解析器,而且我的代码写得太烂不好意思贴出来。我猜大家一定都能写出来,(づ ̄ 3 ̄)づ
网名:
54.159.71.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^