javascript - 我该如何处理这样的物体

标签 javascript jquery underscore.js

我需要在表单中显示错误。

如果子级中定义了错误,则可以将错误附加到输入名称表单中,这是常见情况 (1)。

但可能会发生错误是在 json 对象的根节点 (2) 中定义的。
在这种情况下,应将其附加到 formElement。

以下代码 (3) 适用于情况 (1),但不适用于情况 (2)。

我应该如何修改它才能使其在两种情况下都正常工作?
P.S.:我正在使用下划线和 jquery。

<小时/>

(1)

var xhrObj_1 = JSON.parse('{ "children":{"points":{"errors":["This value should not be blank."]},"message":[],"recipient_id":{"errors":["This value should not be blank."]}}}');
<小时/>

(2)

var xhrObj_2 = JSON.parse('{ "errors":["This form should not be …."], "children":{"points":{"errors":["This value should not be blank."]},"message":[],"recipient_id":{"errors":["This value should not be blank."]}}}');
<小时/>

(3)

var parser = function (object) {
    _.each(object, function (xhrObject, name) {
        console.log(xhrObject)

        if (xhrObject.errors) {
            var inputElement = element.find('[name="' + name + '"]');

            inputElement.closest('.control-group')
                .addClass('error');

            parserError(xhrObject.errors, inputElement);

        } else {
            parser(xhrObject); // it is ok for xhrObj_1
                               // it fails for xhrObj_2
        }
    });
};

// example with xhrObj_2 which does not work
parser({
    "errors": ["errro1"],
    "children": {
        "points": {
            "errors": ["This value should not be blank."]
        },
        "message": [],
        "recipient_id": {
            "errors": ["This value should not be blank."]
        }
    }
});

最佳答案

您应该在顶层开始递归:

var xhr = JSON.parse("…");

(function recurse(obj, name) {
    if (obj.errors) {
        var inputElement = element.find('[name="' + name + '"]');
        inputElement.closest('.control-group').addClass('error');
        parserError(obj.errors, inputElement);
    }
    if ("children" in obj)
        for (var prop in obj.children)
            recurse(obj.children[prop], prop);
})(xhr, "top");

关于javascript - 我该如何处理这样的物体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12175050/

相关文章:

javascript - 我的 append() 似乎不起作用

javascript - 使用 enzyme 进行浅层渲染 : actual and expected output does not match

javascript - 使用 requireJS 和 jQuery 实现点击事件

javascript - 需要一个正则表达式来匹配一个子串n次

javascript - 如何检查数据是否写入firebase数据库?

jquery - Ajax 聊天轮询带宽效率

javascript - 在链接上进行 JQuery 处理后下载文件

javascript - Angularjs 为范围使用自定义插值符号

Javascript - 通过键检索值,包括嵌套对象

javascript - Backbone View render : fetch-first versus render-first, 两种方法都有故障吗?