2017-05-17 12 views
4

私はjavascriptのコードのこの塊を持っている:配列マッピング機能

function arrayMapper(mappingFunc) { 
    return items => items.map(mappingFunc); 
} 

function fooTransformer(tem) { 
    return (...); // do something with item and returns a value 
} 

function barTransformer(tem) { 
    return (...); // do something with item and returns a value 
} 

const foosTransformer = arrayMapper(fooTransformer); 
const barsTransformer = arrayMapper(barTransformer); 
(...) 
foosTransformer([1, 2, 3]); 

arrayMapper機能のようなものがちょうど車輪の再発明を避けるために、lodashのようなものでネイティブに存在するならば、私は思っていました。

+0

あなたはlodashのドキュメントを検索しましたか? – forgivenson

+0

はい、もちろんですが、何も見つかりませんでした – Guid

+4

車輪を改造しますか?それは1行の関数です!何か不足していますか? –

答えて

0

あなたはchainメソッドを使用することができ、その後、あなたはmapを複数回追加することができますし、通話終了時にvalue()

var arr = [1, 2, 3]; 
 
var add1 = e => e + 1; 
 
var add2 = e => e + 2; 
 

 
var result = _.chain(arr).map(add1).map(add2).value() 
 
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>

あなたはまた、ES6パラメータ化代入を使用することができますし、reduce()は取る関数を作成します配列と任意の数のコールバック関数とcallメソッドを配列に渡し、それぞれの関数を提供します。

var arr = [1, 2, 3]; 
 
var add1 = e => e + 1; 
 
var add2 = e => e + 2; 
 

 
function arrayMapper(arr, ...mappingFunc) { 
 
    return mappingFunc.reduce((r, f) => (r = Array.prototype.map.call(r, f), r), arr) 
 
} 
 

 

 
var result = arrayMapper(arr, add1, add2) 
 
console.log(result)

2

あなたは、本質的に何をやっている(右から)curryingマップ機能です。

Lodashあなたはちょうどそれをするために行うことができます:

const mapper = _.curryRight(_.map); 
 

 
const square = mapper(x => x ** 2); 
 

 
console.log(
 
    square([1, 2, 3]) // [1, 4, 9] 
 
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>

言われて、それは確かにそのような小さな機能のライブラリ全体にもたらすためにやり過ぎだと。たぶんnpmを使用している場合は、ただnpm install lodash.curryright lodash.mapしか使用できませんが、それらはまだ不要です。