Обращение преобразования Object.entries
Я использую Object.entries
, чтобы получить некоторые значения из вложенного объекта и фильтровать его.
obj = Object.entries(obj)
.filter(([k, v]) => {
return true; // some irrelevant conditions here
});
Мой объект заканчивается массивом массивов, ключей и vals.
[['key1', val]['key2', val']['key3', val]]
Есть ли простой способ отобразить их обратно в объект? Исходная структура объекта:
{ key:val, key2:val2, key3:val3 }
Ответы
Ответ 1
Конечно, просто используйте .reduce
, чтобы назначить новый объект:
const input = { key:'val', key2:'val2', key3:'val3' };
const output = Object.entries(input)
.filter(([k, v]) => {
return true; // some irrelevant conditions here
})
.reduce((accum, [k, v]) => {
accum[k] = v;
return accum;
}, {});
console.log(output);
Ответ 2
Использование Object.assign с картой, отображающей [k,v]
=> {[k]: v}
Например, приведенный ниже код будет хранить ключи, начинающиеся с key
var obj = {
key: 1,
key2: 2,
key3: 3,
removed: 4,
alsoRemoved: 5
}
obj = Object.assign({}, ...Object.entries(obj)
.filter(([k, v]) => {
return k.startsWith('key');
})
.map(([k, v]) => ({[k]: v}))
);
console.log(obj);
Ответ 3
Для новых браузеров используйте Object.fromEntries:
Object.fromEntries(arr);
Для ES6+ с некоторым распространением может быть один вкладыш.
arr.reduce((a,[k,v])=>({...a,[k]:v}),{})
Образец
Object.entries(sampleObject) // Turn object to array
.reduce((a,[k,v])=>({...a,[k]:v}),{}) // Turn it back to object.
Ответ 4
Использование Reduce с деконструкцией и оператором запятой:
const input = { key:'val', key2:'val2', key3:'val3' };
const output = Object.entries(input)
.filter(([k, v]) => {
return true; // some irrelevant conditions here
})
.reduce((acc, [k, v]) => (acc[k] = v, acc), {});
который должен обеспечивать ту же функциональность, что и ответ CertainPerformance, с немного более кратким синтаксисом
Ответ 5
Если вы точно знаете, какие записи вы хотите исключить, вы можете использовать деконструкцию объекта в сочетании с распространением:
function clean(obj) {
const { unwanted1, unwanted2, ...wanted } = obj;
return { ...wanted };
}
В некоторых случаях это может быть самым чистым решением.