2017-08-14 28 views
0

我有一個屬性的對象與我想要在具有特定值的同一對象中創建的屬性的名稱。我可以以舊的方式做到這一點,但我認爲簡單的胖箭頭解決方案應該是可行的。而且,我不必使用數組arr對象,而是直接使用設備的caps值。箭頭函數沒有這個引用自己了。如何獲得帽值數組中的括號?動態創建屬性和它們的值

let arr = ["onoff", "alarm_motion", "alarm_night"] 
let fillcap = arr => { 

    let obj = {} 

    arr.forEach(a => { 
     return obj[a] = false 
    }) 
    return obj 
} 


let device = { 
    caps: arr, 
    cap: arr.map(c => ({ [c]: false })) 
} 


device = { caps: ['onoff', 'alarm_motion', 'alarm_night'], 
cap: 
[{ onoff: false }, 
{ alarm_motion: false }, 
{ alarm_night: false }] 
} 
device = { 
    caps: arr, 
    cap: fillcap(arr) 
} 

device = { 
    caps: ['onoff', 'alarm_motion', 'alarm_night'], 
    cap: { onoff: false, alarm_motion: false, alarm_night: false } 
} 

回答

0

什麼你試圖做是行不通的,但你可以做這樣的事情:

const arr = ['onoff', 'alarm_motion', 'alarm_night']; 

const device = { 
    caps: arr, 
    fillcap() { 
     this.cap = this.caps.reduce((cap, c) => Object.assign(cap, { [c]: false }), {}); 
    }, 
}; 

device.fillcap(); 
+0

地圖給括號中的鍵值對周圍使得它的對象是什麼,我想避免,支架 – wetlip

+0

我修改了答案,@ wetlip – Adam