当前位置: 首页 > 知识库问答 >
问题:

获取ES6速记法中深层属性的最佳方法[重复]

董元徽
2023-03-14

我遇到了一个问题,在这里我有一个对象,如下所示

a = {
   b: {
    c: 10
   }
};

现在这是一个动态对象,在运行时可以是空的,就像这个a={},我试图用ES6速记符号来读取c,比如const{b:{c}}=a;。但每次对象为空时都会出现错误。有没有一种方法我仍然可以对空对象使用这种表示法,比如在这种情况下c的get undefined。

我知道我可以做像(a. b?a. b. c:未定义),但我只是想知道怎么做。

共有3个答案

阳兴文
2023-03-14

您可能需要一种通用的方法,这种方法对于浅层结构来说并不简洁,但可以节省您编译条件的静态序列。

function dive (obj, pz) {
  return pz.reduce((acc, p) => {
    return obj && p in acc ? acc[p] : undefined;
  }, obj);
}

你可以使用任意深度

console.log(dive({a:{b:{c:[10,11,12]}}}, ['a', 'b', 'c', 1]))

c、 f.本演示

乐正乐湛
2023-03-14

你能行

let a = {
   b: {
    c: 10
   }
};

let result = a && a.b && a.b.c;

console.log(result);
钱远
2023-03-14

您可以对内部对象执行={}

js lang-js prettyprint-override">const a = {
   b: {
    c: 10
   }
};

const f = ({b: {c} = {}}) => console.log(c)

f(a)
f({})
 类似资料:
  • 这不只是为每个属性做一堆if/else if用例吗?

  • 假设您有分层数据,并且希望获得单独属性的合并值,那么最优雅的,或者说groovy的方法是什么呢?

  • 问题内容: 我想知道,JavaScript提供了多种方法来从任何元素中获取第一个子元素,但是哪种方法最好呢?最好的意思是:在行为方面,大多数跨浏览器兼容,最快,最全面且可预测。我用作别名的方法/属性的列表: 这适用于两种情况: 在表单或迭代的情况下。如果我可能遇到文字元素: 据我所知,使用来自的NodeList ,并使用。我将这一假设基于MDN参考: 是对元素节点的第一个子元素的引用,或者如果不存

  • 我想知道,JavaScript提供了多种方法从任何元素中获取第一个子元素,但哪种方法最好?我所说的“最佳”是指:在行为方面,最兼容跨浏览器、最快、最全面、最可预测。我用作别名的方法/属性列表: 这适用于两种情况: 这是表单的情况,或

  • 问题内容: 我需要将JSON对象放入HTML元素的属性中。 HTML不必验证。 昆汀回答: 将JSON存储在有效HTML5 的attribute中。 JSON对象可以是任何大小-即巨大 如果JSON包含特殊字符怎么办? 例如 昆汀回答:按照常规惯例,将JSON字符串放入属性之前,先对其进行编码。 对于PHP,请使用 函数。 编辑-使用PHP和jQuery的示例解决方案 将JSON写入HTML属性:

  • 我试图找出在Spark dataframe列中获得最大值的最佳方法。 考虑以下示例: 上面的每一个都给出了正确的答案,但在没有Spark分析工具的情况下,我无法判断哪一个是最好的。 就Spark运行时或资源使用而言,上述哪种方法最有效,或者是否有比上述方法更直接的方法,有任何来自直觉或经验主义的想法?