javascript - 如何从具有多个键的 json 对象中收集数据并将所有值推送到单个键:值数组
问题描述
我有一个示例 json 对象:
var jsonString = '[{ "name":"John", "age":30, "car":Mercedes},{ "name":"Jimy", "age":32, "car":Audi},{
"name":"Mia", "age":22, "car":Renault},{ "name":"Frank", "age":35, "car":null }]';
var data = JSON.parse(jsonString);
我想从数据数组中获取最新的两个数据并创建一个键:值数组,以便每个 json 属性在数组中有一个键,并且所有 json 对象的所有值都存储在它们相应的键下,例如,我想要的结果通常是数组 [{key: data_array_for_that_key}] 或者具体来说:
output=[{name: [Frank, Mia]}, {age: [35,22]}, {car: [null, Renault]}......]
我试过这样的事情:
var output = [];
data.slice(-2).forEach((d, i) => {
Object.keys(d).forEach((key) => {
output.push({[key] : d[key]});
});
});
console.log(output);
但它为每个 json 对象创建了一个键和值,这不是我想要的。
我该如何解决这个问题?
解决方案
您可以为分组相同的键获取一个哈希表,并为每个新键推送一个新对象output
;
var jsonString = '[{ "name":"John", "age":30, "car":"Mercedes"},{ "name":"Jimy", "age":32, "car":"Audi"},{"name": "Mia", "age": 22, "car": "Renault"},{"name": "Frank","age": 35,"car": null}]',
data = JSON.parse(jsonString);
output = [],
temp = [];
data.slice(-2).forEach(o => Object.entries(o).forEach(([k, v]) => {
if (!temp[k]) output.push({ [k]: temp[k] = [] });
temp[k].push(v);
}));
console.log(output);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- python - 如何获取 GitHub Actions 以在 Ubuntu 中安装 TA-Lib?
- javascript - Javascript 函数:函数 Footer() 与 const Footer = () =>
- java - Jackson 忽略通过 JSON 发送的父类属性
- windows - 删除目录中除 .bat 以外的所有文件
- c++ - 如何制作一个终端应用程序来编码和解码具有 2 个参数、abc 和 coderkey abc 的字符串
- xml - 用于在 urdf 文件中加载网格的文件名,干扰加载包含它的 urdf 文件
- php - 为什么 Unicode 代码点转义语法在 php 中不起作用
- asp.net - User.Identity.Name/User.Identity.GetUserName 总是返回电子邮件而不是用户名
- java - Java volatile和happens-before作用域
- circleci - 在 CircleCI 中如何从邮件 repot 调用另一个 git repo