如何“将一个对象解析并转换为具有不同“键/值”结构的另一个对象”

时间:2019-04-02 08:22:15

标签: javascript jquery arrays object recursion

我正在使用“ jQuery Query Builder”(在UI中)根据用户输入生成自定义对象,我需要将此对象作为“ json-rules-engine”(在服务器中)的输入来生成基于对象条件的结果。但是问题是查询生成器以不同的格式提供输出,而规则引擎以其他格式提供了输入。

我能够遍历对象的所有节点并获得“键/值”。但是我无法使用这些“值”来生成具有不同结构的新对象。

rails db:test

当前,我可以遍历所有节点并读取所有“键/值”。但是我需要将此对象转换为以下内容:

预期输出:

require 'test_helper'

class ArchiveTest < ActiveSupport::TestCase
  test "the truth" do
    assert true
  end
end

1 个答案:

答案 0 :(得分:0)

我很快就刺了一下。请参阅我的工作示例: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;
}

*此功能尚未经过全面测试,因此您可能需要进行一些调整