javascript - JavaScript:在没有 ES6 的情况下将两个列表合并到 JSON 对象中并将相同的键值附加在一起
问题描述
一个快速的 JavaScript 问题。给定两个数组并假设它们的长度相同。我想将这两个数组组合成一个 json 对象数组。此外,如果代码已经存在于数组中,则将错误附加到现有的 .error 元素中。如果有人可以提供使用 vanilla javascript 而不是 ES6 的解决方案,我们将不胜感激。
var codes = ["12345", "12345","67890", "67890", "67890","67890","12092", "12092"];
var errors = ["12345 error 1","12345 error 2","67890 error 1","67890 error 2","67890 error 3","67890 error 4","12092 error 1","12092 error 2"];
应该转化为
{
"code": "12345",
"error": "12345 error 1, 12345 error 2"
},
{
"code": "67890",
"error": "67890 error 1, 67890 error 2, 67890 error 3, 67890 error 4, 67890 error 5"
},
{
"code": "12092",
"error": "12092 error 1 , 12092 error 2"
}
解决方案
您可以使用地图组合它们,然后将它们分组并将其转换为对象数组,然后
const codes = ["12345", "12345","67890", "67890", "67890","67890","12092", "12092"];
const errors = ["12345 error 1","12345 error 2","67890 error 1","67890 error 2","67890 error 3","67890 error 4","12092 error 1", "12092 error 2"];
const res = Array.from(
codes.map((e, i) => ({code: e, errors: errors[i]}))
.reduce((a, b) => a.set(b.code, (a.get(b.code) || []).concat(b.errors)), new Map))
.map(([k, v]) => ({code:k, errors: v}));
console.log(res);
如果您真的希望错误是单个字符串,请添加 .join()
.map(([k, v]) => ({code:k, errors: v.join()}));
前 ES6 版本
var codes = ["12345", "12345", "67890", "67890", "67890", "67890", "12092", "12092"];
var errors = ["12345 error 1", "12345 error 2", "67890 error 1", "67890 error 2", "67890 error 3", "67890 error 4", "12092 error 1", "12092 error 2"];
var grouped =
codes.map(function(e, i) {
return {
code: e,
errors: errors[i]
};
})
.reduce(function(a, b) {
a[b.code] = (a[b.code] || []).concat(b.errors);
return a;
}, {});
var res = Object.keys(grouped).map(function(e) {
return {
code: e,
errors: grouped[e]
}
});
console.log(res);
推荐阅读
- r - 使用管道为对象设置属性
- python - 在 tensorflow 数据集中显示示例不起作用
- azure-active-directory - Azure SQL 的服务器管理员只能通过 Azure AD 进行身份验证吗?我不喜欢没有 MFA 的普通密码
- python - 如何在python中将日期转换为列表
- python - 在一个折线图上绘制多列
- javascript - 是否可以使用 iframe 将 Web 应用程序(例如:ASP.net/node.js MVC 程序)嵌入到网页中?
- google-apps-script - Google 表格 - 如何从 iOS 应用程序运行脚本?
- azure - 用于根据 IDP 检查用户电子邮件并将其带到该 IDP 的 keycloak 流程
- javascript - 如何在 React 应用程序中的 ReactDOM.render 之前初始化 LocalStorage 中的数据
- ios - 使表格视图单元格中的文本字段成为第一响应者