javascript - 使用 ES 6 方法转换 JSON 数组
问题描述
我有以下需要转换的数组格式示例。
{ [
{
"condition": "$and",
"children": [
{ "column": "Title", "comparison": "$eq", "columnValue": "1" },
{ "column": "Event Status", "comparison": "$eq", "columnValue": "2" }
]
},
{
"condition": "$or",
"children": [
{
"column": "Issue Description",
"comparison": "$lt",
"columnValue": "3"
},
{ "column": "Number Label", "comparison": "$gte", "columnValue": "4" }
]
}
]}
需要这样改造……
{
[
{
"$and" : [
{
"Title" : {
"$eq" : "1"
}
},
{
"Event Status" : {
"$eq" : "2"
}
}
]
},
{
"$or" : [
{
"Issue Description" : {
"$lt" : "3"
}
},
{
"Number Label" : {
"$gte" : "4"
}
}
]
}
]
}
我已经尝试了 map 和 reduce 的各种迭代。接近了,但不完全在那里。
这是在一个 Vue 项目中。这是我尝试过的一个例子。
const result = this.parents.map(({ condition, children }) => {
const childArray = children.reduce(
(c, v) => ({
...c,
[v.column]: { [v.comparison]: v.columnValue }
}),
{}
);
childArray.condition = condition;
return childArray;
});
这将返回:
[
{
"Title": { "$eq": "1" },
"Event Status": { "$eq": "2" },
"condition": "$and"
},
{
"Issue Description": { "$lt": "3" },
"Number Label": { "$gte": "4" },
"condition": "$or"
}
]
我无法弄清楚如何在正确的位置获得“条件”键。
解决方案
ES6 计算属性名称将有很大帮助,允许用[]
方括号括起来的变量表达式来计算键值......
let inputExpressions = [
{
"condition": "$and",
"children": [
{ "column": "Title", "comparison": "$eq", "columnValue": "1" },
{ "column": "Event Status", "comparison": "$eq", "columnValue": "2" }
]
},
{
"condition": "$or",
"children": [
{
"column": "Issue Description",
"comparison": "$lt",
"columnValue": "3"
},
{ "column": "Number Label", "comparison": "$gte", "columnValue": "4" }
]
}
];
function translateExpression(expression) {
const translateClause = clause => {
return { [clause.column] : { [clause.comparison] : clause.columnValue } };
};
return { [expression.condition] : expression.children.map(translateClause) };
}
let resultExpressions = inputExpressions.map(translateExpression);
console.log(resultExpressions)
推荐阅读
- bash - 我的 bash 脚本如何重复提示直到获得有效值?
- python - 标记单词,使用 nltk 删除标点符号
- node.js - 如何使用更少的 node_modules 创建 react-app
- java - 我不明白“从 double 到 int 的可能有损转换”是什么意思
- spring - repo.sping.io url 大部分时间都处于关闭状态,因此无法使用 Spring Cloud 数据流服务器部署应用程序
- html - 如何在表格中的 TD 列之间添加间距?
- javascript - 下拉菜单需要多次点击才能打开
- python - 最小和最大功能来计算最小信用卡余额
- android - “命令失败:./gradlew installDebug”问题(react-native run-android)
- javascript - React Pagination:如何在点击时加载第二页数据