如何通过对象数组中的动态键映射获取值?
How to map get values by dynamic key from array of object?
如果可能的话,我想通过 map()
中的动态键获取对象值。
const array = [
{ "ts": 1620988054, "KEY1": 14, "KEY2": 23, "KEY3": 58 },
{ "ts": 1620901654, "KEY1": 46, "KEY2": 34, "KEY3": 42 },
{ "ts": 1620898054, "KEY1": 16, "KEY2": 44, "KEY3": 24 }
];
let data = {};
const arrayOfKeys = [ "KEY1", "KEY2", "KEY3" ];
const keyObject = { "KEY1": "KEY1", "KEY2": "KEY2", "KEY3": "KEY3" };
for (let index = 0; index < arrayOfKeys.length; index++) {
const key = Object.keys(keyObject)[index];
data[key] = array.map(({ KEY1 }) => KEY1);
data[key] = array.map(({ KEY2 }) => KEY2);
data[key] = array.map(({ KEY3 }) => KEY3);
}
console.log(data);
const array = [
{"ts":1620988054, "KEY1":14, "KEY2":23, "KEY3":58},
{"ts":1620901654, "KEY1":46, "KEY2":34, "KEY3":42},
{"ts":1620898054, "KEY1":16, "KEY2":44, "KEY3":24}];
const data = array.reduce((acc, cur) => { // loop through array
const {ts, ...rest} = cur; // for each item, isolate ts from the rest
Object.entries(rest).forEach(([k, v]) => { // loop through the rest
if (k in acc) acc[k].push(v) // if we already have an array for the key, push the new value to it
else acc[k] = [v]; // else create a new array with that key/value pair
});
return acc
}, {});
console.log(data);
如果您想要一个包含与您的键数组相关的键的对象,您可以通过在数组和项目内减少键来减少数组中的项目。
const array = [
{ "ts": 1620988054, "KEY1": 14, "KEY2": 23, "KEY3": 58 },
{ "ts": 1620901654, "KEY1": 46, "KEY2": 34, "KEY3": 42 },
{ "ts": 1620898054, "KEY1": 16, "KEY2": 44, "KEY3": 24 }
];
const arrayOfKeys = [ "KEY1", "KEY2", "KEY3" ];
const data = array.reduce(
(accOuter, record) => arrayOfKeys
.reduce((accInner, key) => ({
...accInner,
[key]: record[key]
? [...accInner[key], record[key]]
: accInner[key]
}),
accOuter),
Object.fromEntries(arrayOfKeys.map(key => [ key, [] ])));
console.log(data);
.as-console-wrapper { top: 0; max-height: 100% !important; }
如果可能的话,我想通过 map()
中的动态键获取对象值。
const array = [
{ "ts": 1620988054, "KEY1": 14, "KEY2": 23, "KEY3": 58 },
{ "ts": 1620901654, "KEY1": 46, "KEY2": 34, "KEY3": 42 },
{ "ts": 1620898054, "KEY1": 16, "KEY2": 44, "KEY3": 24 }
];
let data = {};
const arrayOfKeys = [ "KEY1", "KEY2", "KEY3" ];
const keyObject = { "KEY1": "KEY1", "KEY2": "KEY2", "KEY3": "KEY3" };
for (let index = 0; index < arrayOfKeys.length; index++) {
const key = Object.keys(keyObject)[index];
data[key] = array.map(({ KEY1 }) => KEY1);
data[key] = array.map(({ KEY2 }) => KEY2);
data[key] = array.map(({ KEY3 }) => KEY3);
}
console.log(data);
const array = [
{"ts":1620988054, "KEY1":14, "KEY2":23, "KEY3":58},
{"ts":1620901654, "KEY1":46, "KEY2":34, "KEY3":42},
{"ts":1620898054, "KEY1":16, "KEY2":44, "KEY3":24}];
const data = array.reduce((acc, cur) => { // loop through array
const {ts, ...rest} = cur; // for each item, isolate ts from the rest
Object.entries(rest).forEach(([k, v]) => { // loop through the rest
if (k in acc) acc[k].push(v) // if we already have an array for the key, push the new value to it
else acc[k] = [v]; // else create a new array with that key/value pair
});
return acc
}, {});
console.log(data);
如果您想要一个包含与您的键数组相关的键的对象,您可以通过在数组和项目内减少键来减少数组中的项目。
const array = [
{ "ts": 1620988054, "KEY1": 14, "KEY2": 23, "KEY3": 58 },
{ "ts": 1620901654, "KEY1": 46, "KEY2": 34, "KEY3": 42 },
{ "ts": 1620898054, "KEY1": 16, "KEY2": 44, "KEY3": 24 }
];
const arrayOfKeys = [ "KEY1", "KEY2", "KEY3" ];
const data = array.reduce(
(accOuter, record) => arrayOfKeys
.reduce((accInner, key) => ({
...accInner,
[key]: record[key]
? [...accInner[key], record[key]]
: accInner[key]
}),
accOuter),
Object.fromEntries(arrayOfKeys.map(key => [ key, [] ])));
console.log(data);
.as-console-wrapper { top: 0; max-height: 100% !important; }