假设我有一个物体:
[
{
'title': "some title"
'channel_id':'123we'
'options': [
{
'channel_id':'abc'
'image':'http://asdasd.com/all-inclusive-block-img.jpg'
'title':'All-Inclusive'
'options':[
{
'channel_id':'dsa2'
'title':'Some Recommends'
'options':[
{
'image':'http://www.asdasd.com' 'title':'Sandals'
'id':'1'
'content':{
...
我想找一个id为1的对象。有这样的函数吗?我可以使用下划线的_.filter
方法,但我必须从顶部开始并向下过滤。
22条答案
按热度按时间hgb9j2n616#
另一种递归解决方案,适用于数组/列表和对象,或两者的混合:
用法:
hsvhsicv17#
为此,我创建了库:https://github.com/dominik791/obj-traverse
您可以这样使用
findFirst()
方法:现在
foundObject
变量存储了对您正在查找的对象的引用。px9o7tmv18#
我通过谷歌搜索找到了这个页面,寻找类似的功能。基于Zach和Regarmike提供的工作,我创建了另一个适合我需求的版本。
顺便说一句,交通工作和规则!我将在此处发布代码:
它所做的是在
obj
中查找属性名称和值与targetProp
和targetValue
匹配的任何对象,并将其推送到finalResults
数组。下面是可供使用的jsfiddle:https://jsfiddle.net/alexQch/5u6q2ybc/f2uvfpb919#
改进了@haitaka答案,使用了键和 predicate
因此,可以按如下方式调用:
或
以下是演示:http://jsfiddle.net/a21dx6c0/
已编辑
同样,您可以找到不止一个对象
qc6wkl3g20#
如果您想在搜索Object时获取id为1的第一个元素,可以使用以下函数:
如果要获取id为1的所有元素,则(id为1的所有元素都存储在Result中,如您所见):
piztneat21#
另一个(有些愚蠢的)选择是利用
JSON.stringify
的自然递归特性,并向其传递一个替换函数,该函数在字符串化过程中在每个嵌套对象上运行:7d7tgy0s22#
对我来说起作用的是这种懒惰的方法,而不是算法上的懒惰;)