[英]How to 'Parse and Transform an Object into another Object with different “key/value” structure'
我正在使用“jQuery Query Builder”(在UI中)根据用户输入生成自定义对象,我需要将此Object作为“json-rules-engine”(在Server中)的输入提供,以生成基于Result的结果关于对象的条件。 但问题是Query Builder以不同的格式提供输出,而规则引擎以其他格式获取输入。
我能够遍历Object的所有节点并分别获得“keys / values”。 但我无法使用这些“值”来生成具有不同结构的新对象。
var object = { "condition": "OR", "rules": [{ "condition": "AND", "rules": [{ "field": "name", "operator": "equal", "value": "romeo" }, { "field": "category", "operator": "not_equal", "value": "books" } ] }, { "condition": "AND", "rules": [{ "field": "price", "operator": "greater_or_equal", "value": 100 }, { "field": "in_stock", "operator": "equal", "value": 1 } ] } ] }; function printObj(obj) { for (var key in obj) { var value = obj[key]; if (typeof value === 'object') { printObj(value); } else { console.log(value); } } } printObj(object);
目前,我可以遍历所有节点并读取所有“键/值”。 但我需要将此Object转换为如下所示:
预期产出:
{
any: [{
all: [{
fact: 'name',
operator: 'equal',
value: "romeo"
}, {
fact: 'category',
operator: 'not_equal',
value: "books"
}]
}, {
all: [{
fact: 'price',
operator: 'greater_or_equal',
value: 100
}, {
fact: 'in_stock',
operator: 'equal',
value: 1
}]
}]
}
我快速刺了这个。 看我的工作示例: https : //jsfiddle.net/30m1z25r/
您使用递归函数printObj
处于正确的轨道上。
我创建的功能:
/**
* Format a jQuery Query Builder object for json-rules-engine
*
* @param {Object} query Pass the query builder object
* @return {Object} Formatted object
*/
function formatQuery(query) {
var condition = (query.condition || '').toLowerCase();
var rules = query.rules || [];
var type = condition === 'and' ? 'all' : 'any';
if (condition) {
// Create an empty object for appending values
var build = {};
// Create empty array for storing formatted children
build[type] = [];
// Loop through rules and append formatted objects
for (var i = 0; i < rules.length; i++) {
var rule = rules[i];
build[type].push( formatQuery(rule) );
}
// Return fully formatted object
return build;
}
// If no condition, return self
return query;
}
*这未经过全面测试,因此您可能需要进行一些调整
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.