2017-02-05 4 views
1

Предположим, что у меня есть массив строк, которые представляют собой ключи, такие как ['a', 'b', 'd'] и существующий объект, такой как ...Создать новый объект на основе отфильтрованных ключей

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

Есть ли способ создания нового объекта, который является фильтруется версия obj на основе ключей в массиве такие, что ...

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

с помощью функции Object.assign()?

Я знаю, что он работает с такой функцией, как ...

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

Вы имеете в виду 'Object.assign' в случае' obj [key] 'может быть объектом или массивом, и вы не хотите' obj [key] 'и' result [key] 'делиться ссылкой для той же самой вещи ? –

+2

Не использовать точки с запятой - это плохая практика. Это в конечном итоге укусит вас, и ошибка будет очень трудно найти. – 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);