2016-12-05 46 views
0

我有這樣填充對象中的第二陣列值

const links = { 
    ALLOWED1: [ 'some_path1' ], 
    ALLOWED2: [ 'some_path2' ] 
} 

的情況不過我想也允許在ALLOWED2從以前的陣列的路徑,我已經試過

const links = { 
    ALLOWED1: [ 'some_path1' ], 
    ALLOWED2: [ ...links['ALLOWED1'], 'some_path2' ] 
} 

但是這是無效的,因爲links還沒有定義。當然,我可以手動填充它,但寧可找到更優雅的解決方案。

+0

'ALLOWED2''應該是'ALLOWED2:' –

+0

@KevinKloet謝謝,修正:) – Ilja

+0

你如何填充對象? –

回答

2

你可以用三條線做的,而不是

const links = {}; 
 
links.ALLOWED1 = [ 'some_path1' ]; 
 
links.ALLOWED2 = [ ...links['ALLOWED1'], 'some_path2' ]; 
 

 
console.log(links.ALLOWED2);

記住,常量僅保持參照對象常量,而不是對象的內容。爲此,您需要Object.defineProperty

如果allowed1和allowed2的內容​​有變化,我可能會考慮使用函數來獲取它們。像:links.all =() => [...links.ALLOWED1, ...links.ALLOWED2]。對我來說,在代碼中這會更清晰,除非它真的很清楚allowed2總是超集allowed1。

+0

刪除第3行的')',它會起作用。 –

+0

哎呀,謝謝。希望stackoverflow有一個語法檢查器:) – fet

+0

我剛剛瞭解片段。謝謝,凱文。 – fet

0

另一種,只是因爲有很多方法可以做到這一點,它主要是一個風格問題:)

const links = (() => { 
 
    const ALLOWED1 = ["some_path1"], 
 
     ALLOWED2 = [...ALLOWED1, "some_path2"]; 
 
       
 
    return { ALLOWED1, ALLOWED2 }; 
 
})(); 
 

 
console.log(links);

2

如果你不打算改變ALLOWED2,你可以其轉換爲getter

const links = { 
 
    ALLOWED1: [ 'some_path1' ], 
 
    get ALLOWED2() { return [ ...this['ALLOWED1'], 'some_path2' ] } 
 
} 
 

 
console.log(links.ALLOWED2);