假设我们有函数返回数组让我们说
fn(parm1, parm2, parm3)
我希望条件性地反转返回的数组。
我知道你可以这样做:
condition ? fn(parm1, parm2, parm3).reverse() : fn(parm1, parm2, parm3)
但在我的情况下,我不想打两次电话。不是数组,甚至不是调用数组的函数。
所以我的问题是,有什么明显可做的事情,我已经错过了
array[condition && .reverse()]
或第一种方式是调用数组方法的唯一方法。
答案 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);