在没有条件的情况下处理可能是数组或单个值的数据

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


let result;

if (Array.isArray(data)) {

   result = data.map(d => f(d))

} else {

   result = f(data);

}

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


慕码人8056858
浏览 136回答 2
2回答

慕容708150

您可以在此示例中使用“看起来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方法,则它将创建一个匿名函数,该函数将接受另一个函数,并使用value调用该另一个函数x。最后,它返回计算结果。进一步的想法老实说,我个人的看法是使用条件!这更容易理解和推理。无论如何,它可以在没有条件语句或三元运算符的情况下执行。

慕田峪4524236

您可以添加其他尺寸并使用.flat()它来摆脱它[5].flat() // [5] [[5]].flat() // [5]这样,您可以编写:[data].flat().map(f);但这是没有意义的,只是浪费了计算时间。有条件的应该在这里更快。尝试使输入保持一致,并始终将数组传递到该位置(即使使用单个元素也是如此)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript