2017-07-19 56 views
1

input可以是單數對象,也可以是同一類型對象的數組。我想在所有情況下將myFunction應用於所有這些對象。如何將一個函數應用於對象或類似對象的數組

我不喜歡這樣與Lodash:

if (input.length !== undefined) { 
    // Array 
    return _.map(input, myFunction.bind(this, options)); 
} 
else { 
    // One object 
    return myFunction(options, input); 
} 

有沒有更好的辦法?

+0

使用'Array.isArray',而不是測試了'length'財產。 – Bergi

+0

此外,更好地綁定'myFunction'到'null'而不是'this' – Bergi

+0

這聽起來很像是[codereview.SE] – Bergi

回答

1

一個有趣的方法爲你使用spread syntax,所以你會一直在你的函數接收陣列,簡化IT:

function f1(...input) { 
    return _.map(input, myFunction.bind(this, options)); 
} 

... 

f1(o1); // call passing a single object 
f1(o1, o2); // call passing two objects 
f1(...[o1, o2]); // call passing an array with two objects 
+1

非常聰明的解決方案! –

+0

...我猜是定義爲'f1(func,... args)','myFunction'可以作爲第一個參數傳遞,例如'f1(myFunction,o1,o2)'。 –

+0

是的,它也適用於這種情況! –

相關問題