2 回答

TA貢獻(xiàn)1831條經(jīng)驗 獲得超4個贊
您可以在此示例中使用“看起來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
接受一個函數(shù)和一個值(f
和x
)。它調(diào)用IIFE來確定該值是否x
已實現(xiàn)map
方法。如果是這樣,它將把該map
方法綁定到該值。如果該值未實現(xiàn)map
方法,則它將創(chuàng)建一個匿名函數(shù),該函數(shù)將接受另一個函數(shù),并使用value調(diào)用該另一個函數(shù)x
。
最后,它返回計算結(jié)果。
進一步的想法
老實說,我個人的看法是使用條件!這更容易理解和推理。無論如何,它可以在沒有條件語句或三元運算符的情況下執(zhí)行。

TA貢獻(xiàn)1875條經(jīng)驗 獲得超5個贊
您可以添加其他尺寸并使用.flat()
它來擺脫它
[5].flat() // [5] [[5]].flat() // [5]
這樣,您可以編寫:
[data].flat().map(f);
但這是沒有意義的,只是浪費了計算時間。有條件的應(yīng)該在這里更快。
嘗試使輸入保持一致,并始終將數(shù)組傳遞到該位置(即使使用單個元素也是如此)。
添加回答
舉報