2017-02-05 118 views
1

假設我有一個代表鍵,如['a', 'b', 'd']字符串數組,和現有的對象,如...創建新的對象

const obj = { 
    a: 1, 
    b: 2, 
    c: 3, 
    d: 4, 
    e: 5 
} 

是否有創建一個新對象的方法是基於所述陣列,使得在鍵obj濾波版本...使用Object.assign()函數

const updated = { 
    a: 1, 
    b: 2, 
    d: 4 
} 

我知道它的工作原理與如函數...

function createNew(o, keys) { 
    const updated = {} 

    Object.keys(o).forEach(k => { 
     if (keys.includes(k)) updated[k] = o[k] 
    }) 

    return updated 
} 

,但我正在尋找一個解決方案與Object.assign()

+0

爲什麼你堅持使用'Object.assign'? – hsfzxjy

+0

如果'obj [key]'可以是一個對象或一個數組,並且你不希望'obj [key]'和'result [key]'爲同一事物共享引用,你的意思是'Object.assign' ? –

+2

不使用分號是一種不好的做法。它最終會咬你,而且這個bug很難找到。 – 4castle

回答

2

const obj = { 
 
    a: 1, 
 
    b: 2, 
 
    c: 3, 
 
    d: 4, 
 
    e: 5 
 
}; 
 

 
const desiredKeys = ['a', 'c', 'd']; 
 

 
const result = desiredKeys.reduce((acc, key) => { 
 
    acc[key] = obj[key]; 
 
    return acc; 
 
}, {}); 
 

 
console.log(result);