4 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
您可以使用map、reduce方法和一個(gè)循環(huán)的組合來執(zhí)行此for...in操作,該循環(huán)會(huì)將鍵數(shù)組轉(zhuǎn)換為對(duì)象數(shù)組。然后你可以使用數(shù)組解構(gòu)來獲得兩個(gè)獨(dú)立的對(duì)象。
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 [a, b] = [['a', 'c'], ['b', 'd']]
.map(keys => keys.reduce((r, key) => {
for (let year in dataset) {
if (!r[year]) r[year] = {}
r[year][key] = dataset[year][key]
}
return r;
}, {}))
console.log(a)
console.log(b)

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊
問題是map
返回一個(gè)包含替換元素的數(shù)組,而你想要一個(gè)對(duì)象。
由于您已經(jīng)在使用 Lodash,因此您可以使用它mapValues
來轉(zhuǎn)換對(duì)象的值并返回對(duì)象而不是數(shù)組。
function?pickKeys(dataObj,?keys)?{ ??return?_.mapValues(dataObj,?obj?=>?_.pick(obj,?keys)); }
function pickKeys(dataObj, keys) {
? return _.mapValues(dataObj, obj => _.pick(obj, keys));
}
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
? }
}
console.log(pickKeys(dataset, ["a", "c"]));
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.15/lodash.min.js"></script>

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊
下一個(gè)提供的示例代碼是reduce
基于、通用但在其用法中可配置的……
function createAndCollectSubdata(collector, dataEntry) {
? const { keyLists, subdataList } = collector;
? const [ dataKey, dataValue ] = dataEntry;
? keyLists.forEach((keyList, idx) => {
? ? const data = subdataList[idx] || (subdataList[idx] = {});
? ? const subdata = data[dataKey] || (data[dataKey] = {}) ;
? ? keyList.forEach(key => subdata[key] = dataValue[key]);
? });
? return collector;
}
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 [
? acSubdata,
? bdSubdata
??
] = Object.entries(dataset).reduce(createAndCollectSubdata, {
? keyLists: [["a", "c"], ["b", "d"]],
? subdataList: []
}).subdataList;
console.log('acSubdata :', acSubdata);
console.log('bdSubdata :', bdSubdata);
.as-console-wrapper { min-height: 100%!important; top: 0; }

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超2個(gè)贊
您可以使用給定對(duì)象的條目來映射所需的鍵。
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 } },
groups = [['a', 'c'], ['b', 'd']],
[result1, result2] = Object
.entries(dataset)
.reduce((r, [k, o]) =>
groups.map((group, i) =>
group.reduce(
(q, g) => ({ ...q, [k]: { ...q[k], [g]: o[g] } }),
r[i] || {}
)
),
[]
);
console.log(result1);
console.log(result2);
.as-console-wrapper { max-height: 100% !important; top: 0; }
添加回答
舉報(bào)