无条件地处理可以是数组或单个值的数据

时间:2019-04-12 14:04:06

标签: javascript

我有一个变量data,它可以是单个值(假设它可以是对象,字符串或数字)或数组。我想对数组的每个元素或单个值执行一个函数。目前,我有:

let result;
if (Array.isArray(data)) {
   result = data.map(d => f(d))
} else {
   result = f(data);
}

我可以使用三元函数来达到相同的效果,但是我想删除条件函数。是否有惯用的方法?

2 个答案:

答案 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带有一个函数和一个值(fx)。它调用IIFE来确定值x是否已经实现了map方法。如果是这样,它将map方法绑定到该值。如果该值未实现map方法,则会创建一个匿名函数,该匿名函数接受另一个函数并使用值x调用该另一个函数。

最后,它返回计算结果。

其他想法

说实话,我个人的观点是使用有条件的更容易理解和推理。无论如何,它可以在没有条件语句或三元运算符的情况下实现。