【发布时间】:2021-02-03 01:57:25
【问题描述】:
我有这个对象:
const dataset = {
"2019": {
"a": 1,
"b": 2,
"c": 3,
"d": 4
},
"2020": {
"a": 2,
"b": 4,
"c": 6,
"d": 8
},
"2021": {
"a": 10,
"b": 11,
"c": 12,
"d": 13
}
}
我想获取这两个对象:
const obj1 = {
"2019": {
"a": 1,
"c": 3,
},
"2020": {
"a": 2,
"c": 6,
},
"2021": {
"a": 10,
"c": 12,
}
}
const obj2 = {
"2019": {
"b": 2,
"d": 4
},
"2020": {
"b": 4,
"d": 8
},
"2021": {
"b": 11,
"d": 13
}
}
因此,根据内部对象的某些键将对象“拆分”为两个对象。 这是我尝试过的:
function pickKeys(dataObj, keys) {
return Object.entries(dataObj).map(([d, obj]) => {
return { [d]: _.pick(obj, keys) }
})
}
const obj1 = pickKeys(dataset, ['a', 'c'])
结果是:
const obj1 = [
{ '2019': { a: 1, c: 3 } },
{ '2020': { a: 2, c: 6 } },
{ '2021': { a: 10, c: 12 } }
]
差不多了,但并不完美。哪种方法更好?
【问题讨论】:
-
分离
a,c和b,d背后的逻辑是什么 -
没有逻辑,我需要这样拆分对象
-
所以它总是一个具有
a、b、c和d属性的对象?而且您总是希望a和c在一个对象中,而b和d在另一个对象中? -
最终你想要一个对象,所以当你从
Object.entries开始时,你会以某种方式回到Object.fromEntries或Array.reduce。
标签: javascript data-structures mapping reduce