【问题标题】:Is there a way to shorten a member function of an object conditionally in JavaScript?有没有办法在 JavaScript 中有条件地缩短对象的成员函数?
【发布时间】:2020-03-20 01:37:48
【问题描述】:

我正在制作一个同时接受.toArray() 和不接受的函数。在 es6、es7 或 es8 中是否有条件添加它?

await db
   .collection(collection)
   .find(params)
   .toArray() //I want tis conditionally added or not

从这个意义上说(这不起作用)

   multiple && .toArray()

或者这只能在两种方法上实现?

【问题讨论】:

  • 您可以使用变量有条件地将函数存储到内存中。在大多数情况下,它不会提高性能。如果你不执行这个函数,那么它就不会执行。

标签: javascript node.js mongodb ecmascript-6


【解决方案1】:

有没有办法在 JavaScript 中有条件地缩短对象的成员函数?

不是真的。你有一组链接的方法,你不能有条件地向链中插入一些东西。

我的感觉是最明确的选择是这样的:

let x = db.collection(collection).find(params);
if (someCondition) x = await x.toArray();

还有其他一些奇怪的事情,例如提前在对象上放置一个无操作方法,然后从有时包含“toArray”有时包含“noop”的变量执行方法。

let x = await db.collection(collection).find(params)[someCondition ? "toArray" : "noop"]();

但是,我不认为我自己会这样编写代码,因为我认为它不是很清楚。


仅供参考,您的特定示例有点奇怪,因为 .find() 返回一个游标对象,.toArray() 返回一个解析为数组的承诺。因此,您还要求以一种方式与另一种方式结束不同类型的数据。似乎这种不同的结果类型无论如何都必须走不同的代码路径,因此条件分支不仅仅是这一步。这表明人们应该真正着眼于整体问题,而不仅仅是这一步或为了提出最佳解决方案。

【讨论】:

    猜你喜欢
    • 2019-12-01
    • 2011-11-25
    • 2013-02-01
    • 1970-01-01
    • 2021-11-04
    相关资源
    最近更新 更多