假设我有一个物体:
[
{
'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条答案
按热度按时间tzdcorbm1#
@Iulian Pinzaru的答案几乎就是我需要的,但如果您的对象有任何空值,它就不起作用。这个版本解决了这个问题。
ldxq2e6h2#
如果您已经在使用下划线,请使用_.find()
esbemjvw3#
这段代码允许您获取其键为用户定义的JSON中的所有对象。
下面是一个例子:
dohp0rv54#
如何搜索测试5或测试3嵌套值,如果它们存在,则返回‘name’值。
33qvvth15#
欢迎光临:Gorillaz
aamkag616#
找到了我一直在寻找的答案,尤其是阿里·阿尔诺艾米的解决方案。我做了一些小调整,以便也可以搜索值
要使用以下功能,请执行以下操作:
这将返回包含匹配键和值的对象。
xcitsw887#
不久前,我制作了一个小的库
find-and
,它可以在npm上找到,用于以一种隐藏的方式处理嵌套对象。returnFound
函数返回找到的对象,如果找到多个对象,则返回对象数组。例如,
退货
nimxete28#
我想建议对Zach/RegularMike的回答进行修改(但我没有“声誉”可以发表评论!)我发现这些解决方案是一个非常有用的基础,但在我的应用程序中受到了影响,因为如果数组中有字符串,它将递归地为字符串中的每个字符调用函数(这会导致IE11和Edge浏览器失败,并出现“超出堆栈空间”的错误)。我的简单优化是将“OBJECT”子句递归调用中使用的相同测试添加到“ARRAY”子句中的测试:
因此,我的完整代码(现在查找特定键的所有示例,因此与原始要求略有不同)是:
42fyovps9#
改进了答案,以考虑对象内的循环引用。它还显示了它到达那里的路径。
在本例中,我正在搜索我知道位于全局对象中某个位置的IFrame:
运行以下命令:
getObject(reader, 'reader')
将显示以下输出和最后的iframe元素:注意:路径的顺序与
reader.book.rendition.manager.views._views.iframe
相反zpqajqem10#
1.检测深度嵌套对象中的键。
1.最后返回检测到的key的值。
ldxq2e6h11#
只要使用递归函数即可。
请参见下面的示例:
eeq64g8w12#
递归是你的朋友。我更新了该函数以说明属性数组:
已更新jsFdle:http://jsfiddle.net/FM3qu/7/
px9o7tmv13#
您可以在递归函数中使用javascript
some
函数。有些方法的优点是,一旦孩子被发现,就可以停止循环。不要使用在大数据中速度较慢的Map。x6492ojm14#
我们使用object-scan进行数据处理。它在概念上非常简单,但允许很多很酷的东西。以下是您将如何解决您的特定问题
cbwuti4415#
如果您对整个ES6感兴趣,您可以使用
按值查找将略有不同
那么它们就可以像这样使用