【问题标题】:What is the most efficient way to retrieve properties from a nested JavaScript object?从嵌套的 JavaScript 对象中检索属性的最有效方法是什么?
【发布时间】:2020-05-26 07:19:12
【问题描述】:

我使用具有嵌套数据的 API。数据在小页面中发送(一次

    JSON -> JS -> ImmutableMap -> JS

所以我更喜欢使用原生 JS。缺点是不可变 JS 的 API 对于使用 getIn() 检索地图中的字段非常方便。对于原生 JS,我使用方括号来访问嵌套对象字段。

    const A = { B : { C: D }};
    const d = A['B']['C'];

这可能非常冗长。我不确定不可变 JS 是否为我的用例提供了更好的性能。它不是一个大的对象映射,我认为从 JS 转换为不可变回到 JS 会有一些开销。但是,我也不确定使用方括号访问嵌套对象属性的防御性。

【问题讨论】:

  • const d = A.B.C 呢?
  • 我不确定在尝试访问无效字段时点运算符和方括号的处理方式是否存在差异,或者性能是否存在差异。
  • 两者都会告诉你“无法读取未定义的属性'X'
  • 你也可以探索解构:const { B: { C: d }} = A
  • 检查我的答案

标签: javascript immutable.js


【解决方案1】:

用点访问

您可以通过以下方式访问您的数据:

const A = { B : { C: 'D' }};
const d = A.B.C;

doesn't seem 与使用方括号或点运算符访问属性有很大区别。

解构

你也可以通过解构来达到同样的效果:

const A = { B : { C: 'D' }};
const { B: { C: d }} = A;

处理未定义

为避免未定义,您可以在解构中使用默认值:

const getD = ({B : { C :d } = {}} = {}) => console.log(d)
getD(undefined);// -> undefined

或者

const { B: { C : d } = {} } = {}
console.log(d); // -> undefined

【讨论】:

  • 谢谢,对于一小部分数据,我很好奇不可变与原生 JS 的性能,但我无法找到相关信息。
  • 网络上有基准测试工具。不要犹豫,创建自己的。
猜你喜欢
  • 2012-12-29
  • 1970-01-01
  • 2011-10-19
  • 1970-01-01
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
  • 2012-08-11
  • 1970-01-01
相关资源
最近更新 更多