2017-02-27 44 views
0

我有以下代碼清潔方法給變量賦值在ES6

const lower = U => U.toLowerCase(); 

const A = lower('A') 
const B = lower('B') 
const C = lower('C') 
const D = lower('D') 
... 

如何代表這是一個更清潔的方式?保證傳遞給函數的變量名和參數是相同的。

一個可能的解決方案,我能想到的是

const [ A, B, C, D ] = ['A', 'B', 'C', 'D'].map(lower) 

有沒有這種重複的解決方案?

+0

那麼,你是否試圖以優雅的方式得到所有的小寫字母? –

+0

爲什麼會有問題?目前的實施情況如何? – Li357

+1

爲什麼你需要變量呢?難道你不能繼續鏈接並做你需要的嗎?動態變量不好... – elclanrs

回答

1

您可以使用以前的變量名稱作爲關鍵字的對象。維護和迭代很容易。

const lower = U => U.toLowerCase(), 
 
     object = {}; 
 

 
['A', 'B', 'C', 'D'].forEach(c => object[c] = lower(c)); 
 

 
console.log(object);

隨着內

const lower = U => U.toLowerCase(), 
 
     object = { A: 'A', B: 'B', C: 'C', D: 'D' }; 
 

 
Object.keys(object).forEach(k => object[k] = lower(object[k])); 
 

 
console.log(object);

-1

這已經被證明是一個對我來說 「非常」 有趣的問題,並幫助對象的給定值我在JavaScript中深入理解某些東西(儘管並非完全)。長話短說你可以做如下;

var f = String.prototype.toLowerCase, 
 
    r = []; 
 

 
r = ["A", "B", "C", "D"].map(f.call,f); 
 
console.log(r);

在這裏,我們提供thisString.prototype.toLowerCase功能本身。然而,這是一個微不足道的問題。

當您嘗試使用.map().map()隔離的回調函數時,通過傳遞相同的參數,一切正常,如下所示;

var c = String.prototype.toLowerCase.call("A",0,["A", "B", "C", "D"]); 
 
console.log(c); // <- "a";

但是,如果你在一個.map()應用功能完全一樣會拋出「未捕獲的類型錯誤:未定義是不是一個函數」,如下所示的錯誤;

r = ["A", "B", "C", "D"].map(String.prototype.toLowerCase.call);

嗯...好像內.map()我們必須提供thisString.prototype.toLowerCase函數對象本身。爲什麼這樣..?誠實地擊敗了我。可能有人可以幫助...

+1

爲什麼?因爲'call'和其他方法一樣,只是在你傳遞它的時候就是一個未綁定的函數。 – Bergi

+0

@Bergi很棒..只是'r = [「A」,「B」,「C」,「D」]。map(Function.call,String.prototype.toLowerCase);'謝謝。 – Redu