在JavaScript中实现条件数组方法的最佳方式

5
假设我们有一个返回数组的函数,例如fn(parm1, parm2, parm3),我想要对返回的数组进行条件反转。
我知道你可以像这样做:
condition ? fn(parm1, parm2, parm3).reverse() : fn(parm1, parm2, parm3)

但在我的情况下,我不想调用两次。不是数组甚至调用数组的函数。

所以我的问题是,是否有明显的解决方法,而我却忽略了像

array[condition  && .reverse()]

第一种方法是调用数组方法的唯一方式。


5
该函数没有被调用两次。您的意思是它被写了两次吗? - guest271314
1
该函数将被 调用一次。您的问题不存在 ;) - Jonas Wilms
为了阅读和编写的简便性,在条件语句之前将数组存储在变量中。 - charlietfl
是的,抱歉我当然是指写了两遍。 - Jalal
5个回答

7
您可以使用 Array#slice 作为默认方法。
result = fn(parm1, parm2, parm3)[condition ? 'reverse' : 'slice']();

为了避免使用slice并防止获得数组的副本,您可以实现一个函数,仅从对象中获取this而不改变它。

Array.prototype.nop = function () { return this; };

result = fn(parm1, parm2, parm3)[condition ? 'reverse' : 'nop']();

为什么要创建一个新的数组? - guest271314
1
@JimmyJanson 如果要求不重复编写代码,为什么要创建两次数组? - guest271314
@guest271314 怎么才能创建两个?我不明白。 - Jalal
@JimmyJanson Array.prototype.slice() 返回一个新的数组。 - guest271314
@Michelangelo请查看原始问题中描述的要求:“但在我的情况下,我不想调用两次。不是数组,甚至不是调用数组的函数。所以我的问题是,有没有什么明显的事情可以做,我错过了像array[condition && .reverse()]"_ 在评论“我当然是指写两次” _ https://dev59.com/Dabja4cB1Zd3GeqPhIHu#sI8foYgBc1ULPQZF5grV。如果要求不重复执行某些操作,为什么要执行两次?尽管OP可以自由选择接受或不接受任何答案。 - guest271314
显示剩余9条评论

2
var arr = fn(parm1, parm2, parm3);
condition && arr.reverse();

@NinaScholz “您需要使用reverse进行赋值操作”。不确定您的意思?回答中的代码应该符合要求。 - guest271314
@JimmyJanson:“对我没用,无法在尝试执行它的数组内声明变量arr。fn是另一个数组中的元素。”这与原始问题所描述的要求有何关系?你所说的“在数组内部”是什么意思? - guest271314
@guest271314 像这样 [1, 2, 3, 返回数组的函数, 3] - Jalal
你能在问题中发布实际的代码吗?请参考 https://stackoverflow.com/help/how-to-ask 和 https://stackoverflow.com/help/mcve。 - guest271314
让我们在聊天中继续这个讨论 - Jalal
显示剩余5条评论

1

使用排序怎么样?不过我不确定浏览器和node.js在这里的行为是否相同:

const arr = fn(parm1, parm2, parm3).sort(()=> INVERTED ? 1 : 0);

1
我有一个数组想要升序和降序排序。sort布尔运算符和三元运算符带我到了这里。基本上,如果为false,则乘以-1。它甚至可以被简化得更少。
data.items
.sort((a, b) =>
    new Date(a.date) > new Date(b.date)
    ? -1 * (sort ? 1 : -1)
    : 1 * (sort ? 1 : -1)
)

0

请保持易读易懂:

var arr = fn(parm1, parm2, parm3);
if (condition) {
    arr.reverse();
}

对于未来阅读你代码的人来说,复杂的解决方案并不会得到赞赏。


1
这与@guest271314的答案有何不同? - Jalal
正如我之前所写的,使用 if 关键字可以使代码更易于理解。当然,这是个人观点,但我相信大多数人都同意。此前已经讨论过这个问题,请在这里阅读:https://dev59.com/nFsW5IYBdhLWcg3wqo0x - Zoli Szabó

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接