如何以jQuery的方式搜索和操作复杂的JavaScript对象
How to Search and Manipulate Complex JavaScript Objects in a jQuery fashion
在web应用程序的上下文中,我有一个服务器,它根据客户端的输入发送或接收JSON字符串。在客户端使用时,这些JSON字符串立即转换为JavaScript对象,在那里它们将作为对象存在。这些对象不是数组;它们表示复杂的、任意的数据模型,其中的每个属性可以有任意数量的唯一子属性或对象。
var myView = {
name: 'root'
id: 'root_0'
children: {
child_1: {
arbitraryid: 'root_0_child_1',
type: 'Department',
name: 'Produce',
quadrant: 1,
children: {
child_1: {
arbitraryid: 'root_0_child_1_child_1',
type: 'Aisle',
number: 3,
length: 12,
children: { }
}
}
},
child_2: {
arbitraryid: 'root_0_child_2',
name: 'West',
type: 'Region',
children: {
child_1: {
arbitraryid: 'root_0_child_2_child_1',
name: 'Wegmans',
type: 'Store',
children: {
child_1: {
arbitraryid: 'root_0_child_2_child_1_child_1',
type: 'Department',
children: { }
}
}
}
}
}
}
};
当我构建JSON字符串服务器端时,我保证所有对象将具有'children'和'arbitraryid'属性;但是其他的都是动态生成的,属性和值完全是任意的。
如果这是XML,我可以使用jQuery来var someChild = myView.find('#root_0_child_1_child_1')
。这将得到我一个jQuery对象与结果的查找和不仅对myView的引用,但的位置从中移动全方位通过对象:var someChild = myView.find('#root_0_child_1_child_1').parent()
。
是否存在一个实用程序来解决本机JavaScript对象的这个问题,或者是否有一个更好的方式/方法来做到这一点?我希望避免编写一堆这种类型的代码来简单地获取我的属性,然后可能再次循环更新父对象。
while (obj.hasOwnProperty('children')) {
for (var child in obj) {
//..etc, etc
}
}
我看到的关于这个主题的大多数SO问题都涉及搜索数组,经常使用可预测的数据表样式构造。
映射是可能的,但这些对象很快就会变得深度,这个选项似乎比愚蠢的循环好不到哪里去。
想法?
编辑:滚动我自己的实用程序类
我仍然在探索其他库/实用程序,但我写了一个通用的助手类来做搜索:
ObjectHelper
虽然有用,但我认为它说明了获得其他类似jquery的功能的一些困难。我不仅希望搜索,而且希望能够像链接.parent().children().find()操作符一样,在对象属性结构中上下爬行。可行,但很复杂。
我发现了一些JSON查询语言:
- JSONPath
- JAQL LINQ to Javascript
- JSINQ
- jLinq
- SQLike(尽管名称,它用于查询JSON)
- TrimQuery(使用类似sql的语言来查询JSON对象)
本页对它们进行了总结,并分析了它们的优缺点。
还有一个DOJO模块用于查询JSON:
- JSONQuery
我不确定这些有多稳定/标准。
我通过滚动我自己的类来解决这个问题。ShadesJS现在是相当基础的,但是它有一些抓取JavaScript对象和使用Web Storage的方法。待办事项是实现父/子方法,以获得一些jquery式的灵活性。这并不难做到,但要做到正确和高效是很棘手的。
- 如何使jQuery插件函数可调用以供独立使用,而不在集合上操作
- Jquery菜单操作不稳定,定位不正确,存在一般错误
- 如何确定javascript已经完成了某些操作.ios上的
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- 从JavaScript访问struts操作中的属性
- fluxxor向一个flux实例添加一组以上的操作
- Jquery表单验证插件-如果选中复选框,如何在提交时执行某些操作
- 在Redux中,我应该在哪里编写复杂的异步流
- 复杂的日期数组操作
- 在 Meteor 中使用复杂的更新选择器进行原子操作
- 对于复杂的操作,我们可以使用JQuery UI对话框吗
- Emberjs:使用父级和子级的数据创建一个复杂的操作
- 如何确保复杂画布操作的正确执行顺序
- 复杂的字符串操作
- 在 jsp 页中设计一个复杂的结构,并使用操作类在其上传达值
- ExtJS和复杂的保存操作
- Redux-对复杂图形的状态进行建模,并触发多个更新和副作用以响应单个操作
- JS复杂的选定文本操作
- 如何以jQuery的方式搜索和操作复杂的JavaScript对象
- 在复杂的AngularJS应用中使对象全局可访问和可操作的最好方法