javascript - 处理可以是数组或单个值的数据,没有条件
问题描述
我有一个变量data
,它可以是单个值(假设它可以是对象、字符串或数字)或数组。我想对数组的每个元素或单个值执行一个函数。目前,我有:
let result;
if (Array.isArray(data)) {
result = data.map(d => f(d))
} else {
result = f(data);
}
我可以使用三元来达到同样的效果,但我想删除条件。有没有一种惯用的方式来做到这一点?
解决方案
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'));
怎么回事??
fmap
接受一个函数和一个值(f
和x
)。它调用一个 IIFE 来确定该值是否x
已经实现了一个map
方法。如果是,则将该map
方法绑定到该值。如果 value 没有实现map
方法,它会创建一个匿名函数,该函数接受另一个函数并使用 value 调用另一个函数x
。
最后,它返回计算结果。
进一步的想法
老实说,我个人的意见是使用条件!它更容易理解和推理。无论如何,没有条件语句或三元运算符也是可行的。
推荐阅读
- vue.js - 我无法使用该州的 formData 在服务器上发布我的文件
- excel - 根据单元格值删除行
- csv - 根据列中的值删除行
- facebook - 通过 Facebook API 提升 Instagram 帖子
- android - Xamarin.Forms:在地图点击时隐藏 ListView?
- c# - Visual Studio 2017 设计器视图不显示控件
- excel - 按主题搜索所有文件夹中的最新电子邮件并全部回复
- javascript - 表格未提交正确的数据
- asp.net-core-mvc - 如何修复从 Postman 中的 PUT json 发送的空对象?
- c# - 删除事件不是从角度调用 get 方法调用