-
鸿蒙传说
您可以使用map、reduce方法和一个循环的组合来执行此for...in操作,该循环会将键数组转换为对象数组。然后你可以使用数组解构来获得两个独立的对象。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)
-
一只甜甜圈
问题是map返回一个包含替换元素的数组,而你想要一个对象。由于您已经在使用 Lodash,因此您可以使用它mapValues来转换对象的值并返回对象而不是数组。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>
-
撒科打诨
下一个提供的示例代码是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; }
-
慕斯王
您可以使用给定对象的条目来映射所需的键。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; }