我有一个变量data
,它可以是单个值(假设它可以是对象,字符串或数字)或数组。我想对数组的每个元素或单个值执行一个函数。目前,我有:
let result;
if (Array.isArray(data)) {
result = data.map(d => f(d))
} else {
result = f(data);
}
我可以使用三元函数来达到相同的效果,但是我想删除条件函数。是否有惯用的方法?
答案 0 :(得分:0)
您可以添加其他尺寸并使用Image
来消除它
LayeredLayout
您可以这样写:
Label
但是没有意义,只是浪费计算时间;有条件的应该在这里更快。
尝试使您的输入保持一致,并始终将数组传递到该位置(即使使用单个元素也是如此)。
答案 1 :(得分:0)
在此示例中,您可以使用“深奥的外观” function
(我叫fmap
(尽管名称并不正确))
function fmap (f, x) {
return (function (g) {
return g(f);
})((x && x.map && x.map.bind(x)) || function (h) { return h(x); });
}
const upper = x => x.toUpperCase();
console.log('fmap over array:', fmap(upper, ['a', 'b', 'c']));
console.log('fmap over string:', fmap(upper, 'a'));
WTF?
fmap
带有一个函数和一个值(f
和x
)。它调用IIFE来确定值x
是否已经实现了map
方法。如果是这样,它将map
方法绑定到该值。如果该值未实现map
方法,则会创建一个匿名函数,该匿名函数接受另一个函数并使用值x
调用该另一个函数。
最后,它返回计算结果。
其他想法
说实话,我个人的观点是使用有条件的! 更容易理解和推理。无论如何,它可以在没有条件语句或三元运算符的情况下实现。