在javascript中执行条件数组方法的最佳方法

时间:2017-11-04 20:35:49

标签: javascript

假设我们有函数返回数组让我们说 fn(parm1, parm2, parm3)我希望条件性地反转返回的数组。

我知道你可以这样做:

condition ? fn(parm1, parm2, parm3).reverse() : fn(parm1, parm2, parm3)

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

所以我的问题是,有什么明显可做的事情,我已经错过了

array[condition  && .reverse()]

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

5 个答案:

答案 0 :(得分:6)

您可以使用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']();

答案 1 :(得分:2)

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

答案 2 :(得分:0)

只是让它易于阅读和理解:

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

Tricky解决方案不会受到将来阅读您的代码的人的赞赏。

答案 3 :(得分:0)

我有一个要对asc和desc进行排序的数组。布尔和三进制运算符使我想到了这一点。基本上,如果为false,则乘以-1。甚至可以对此进行简化。

data.items
.sort((a, b) =>
    new Date(a.date) > new Date(b.date)
    ? -1 * (sort ? 1 : -1)
    : 1 * (sort ? 1 : -1)
)

答案 4 :(得分:0)

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

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