![]() |
1
331
如果你不想
你可以简单地
|
![]() |
2
311
这是一个模式 picked up from Oliver Steele :
事实上,整篇文章都在讨论如何使用javascript实现这一点。他决定用上面的语法(一旦习惯了就不难理解)作为一种习惯用法。 |
![]() |
3
218
更新
看起来像洛达斯
has added
上一个答案lodash 用户可以享受 lodash.contrib 哪个有 couple methods that mitigate this problem . 获取路径
签名:
根据
给的钥匙。键可以作为数组或点分隔字符串给出。
退换商品
|
![]() |
4
162
我已经做了 performance tests (谢谢) cdMinix 对于添加lodash)对这个问题提出的一些建议,结果如下。
Object Wrap (by Oliver Steele) 最快34%
Original solution (suggested in question) 艾氏45%号
checkNested 50%
get_if_exist 艾氏52%号
validChain 54%
objHasKeys 艾氏63%号
nestedPropertyExists 艾氏69%号
_.get 72% deeptest 86%
sad clowns “100%”最慢
|
![]() |
5
41
如果将名称处理为字符串,则可以在任何深度读取对象属性:
它返回
|
![]() |
6
25
如果您是在ES6环境中编码(或使用 6to5 )然后你就可以利用 arrow function 语法:
在性能方面,使用
考虑简单地使用
|
![]() |
7
18
怎么样
|
![]() |
8
12
ES6答案,经过彻底测试:)
艾尔见 Codepen with full test coverage |
![]() |
9
8
我尝试了递归方法:
这个
我用它来打印一个友好的html视图,其中包含一组具有未知键/值的对象,例如:
|
![]() |
10
8
您还可以将tc39可选链接建议与babel 7一起使用。- tc39-proposal-optional-chaining 代码如下所示:
|
![]() |
11
7
我认为下面的脚本提供了更可读的表示。 声明函数:
然后像这样使用:
我称之为“悲伤的小丑技巧”,因为它使用了符号o( 编辑: 这是一个版本 打字稿 它在编译时提供类型检查(如果使用像visual studio这样的工具,还提供intellisense)
用法相同:
但这次Intellisense奏效了! 另外,可以设置默认值:
|
![]() |
12
5
我没有看到有人使用 Proxies
所以我想出了我自己的。
最棒的是你不需要插入字符串。你可以把链子
上面的代码对于同步的东西很有用。但是,如何测试像ajax调用这样异步的东西呢? 你怎么测试的?如果返回500 http错误时响应不是json怎么办?
当然可以使用async/await来消除一些回调。但如果你能更神奇地做到呢?像这样的东西:
你可能想知道所有的承诺在哪里&
|
![]() |
13
4
一个简单的方法是:
这个
|
![]() |
14
4
基于
this answer
,我用
|
![]() |
15
3
一个简短的ES5版@CMS的完美答案:
通过类似的测试:
|
![]() |
16
2
cms给出的答案也适用于空检查的以下修改
|
![]() |
17
2
以下选项从 this answer . 两棵树相同:
未定义时停止搜索
逐级确保
|
![]() |
18
2
我知道这个问题已经过时了,但我想通过向所有对象添加这个来提供一个扩展。我知道人们不喜欢使用对象原型来扩展对象功能,但我发现没有比这样做更容易的了。另外,现在允许 Object.defineProperty 方法。
现在,为了测试任何对象中的任何属性,您只需执行以下操作:
Here's a jsfiddle 为了测试它,特别是它包含了一些jquery,如果直接修改object.prototype,就会中断,因为属性变成了可枚举的。这对第三方库应该很有用。 |
![]() |
19
2
我认为这是一个轻微的改进(变成一个1行):
这是因为&运算符返回其计算的最后一个操作数(并且它短路)。 |
![]() |
20
2
如果属性存在,我正在寻找要返回的值,因此我修改了上面cms的答案。我想到的是:
|
![]() |
21
2
这适用于所有对象和数组:) 前任:
这是我对布莱恩答案的改进版本 我用过 有 作为属性名,因为它可能与现有的has属性冲突(例如:maps)
这里是 fiddle |
![]() |
22
2
以下是我的看法-这些解决方案大多忽略嵌套数组的情况,如下所示:
我想查一下
使用下面的功能,您可以
如果对象存在,函数将返回true,否则返回false
|
![]() |
23
2
现在我们也可以用
|
![]() |
24
2
我想再加一个我今天想到的。我为这个解决方案感到自豪的原因是,它避免了在许多解决方案(如 Object Wrap (by Oliver Steele) : (在本例中,我使用下划线作为占位符变量,但任何变量名都可以使用)
|
![]() |
25
2
我创建了一个小函数来安全地获取嵌套对象属性。
或者是一个简单但有点不可读的版本:
或者更短,但不退却错误的旗帜:
我有以下测试:
下面是一些测试:
要查看包含文档和我尝试过的测试的所有代码,可以查看我的github要点: https://gist.github.com/vsambor/3df9ad75ff3de489bbcb7b8c60beebf4#file-javascriptgetnestedvalues-js |
![]() |
26
1
有一个功能 here on thecodeabode (safeRead) 会以一种安全的方式…即
如果任何属性为空或未定义,则返回空字符串 |
![]() |
27
1
基于 a previous comment ,这是无法定义主对象的另一个版本:
|
![]() |
28
1
我编写了自己的函数,它采用了所需的路径,并且有一个好的和坏的回调函数。
用途:
|
![]() |
29
1
|
![]() |
30
1
我也有同样的问题,想看看能不能想出自己的解决办法。它接受要检查的路径作为字符串。
以下是一些日志和测试用例的片段:
|
![]() |
code-geek · Jquery根据单选按钮选择隐藏或显示文本字段 5 月前 |
![]() |
Alex · 在轻量级中同时解构和不解构变量 5 月前 |
![]() |
Ângelo Rigo · ReactJS映射:如何迭代[关闭] 5 月前 |
![]() |
bairog · 从按属性筛选的对象数组字典中创建值数组 5 月前 |
![]() |
lokiuucx · JS对象属性返回未定义,尽管对象属性应该有值 5 月前 |