【问题标题】:Loop nested array values using jQuery使用 jQuery 循环嵌套数组值
【发布时间】:2022-01-14 23:16:51
【问题描述】:

使用下面的 JSON,如何使用 jQuery 循环内部 Errors 和 Messages 值:

JSON 格式:

{
   "PagesCreated":0,
   "AssetsCreated":0,
   "AssetsUpdated":0,
   "Messages":[
      "Test message!",
      "Test message!",
      "Test message!"
   ],
   "Errors":[
      "Test error!",
      "Test error!",
      "Test error!"
   ],
   "EllapsedTime":"00:00:00.0000382"
}

当前 jQuery 在 ajax 成功调用中到位:

$.each(data, function (key, value) {
    if (key == "PagesCreated") {
        console.log(value); // works
    }
    else if (key == "AssetsCreated") {
        console.log(value); // works
    }
    else if (key == "AssetsUpdated") {
        console.log(value); // works
    }
    else if (key == "EllapsedTime") {
        console.log(value); // works
    }
    else if (key == "Messages") {
        // TODO - How do I loop inner Messages values here?
    }
    else if (key == "Errors") {
        // TODO - How do I loop inner Errors values here?
    }
});

如果有帮助,这是我要序列化为 json 的 c# 对象:

public class MyObj
{
    public int PagesCreated { get; set; }
    public int AssetsCreated { get; set; }
    public int AssetsUpdated { get; set; }
    public TimeSpan EllapsedTime { get; set; }
    public List<string> Messages { get; set; }
    public List<string> Errors { get; set; }
}

感谢您的帮助!

【问题讨论】:

    标签: c# jquery json ajax


    【解决方案1】:

    你可以再次使用 .each 方法:

    $.each(data, function (key, value) {
        if (key == "PagesCreated") {
            console.log(value); // works
        }
        else if (key == "AssetsCreated") {
            console.log(value); // works
        }
        else if (key == "AssetsUpdated") {
            console.log(value); // works
        }
        else if (key == "EllapsedTime") {
            console.log(value); // works
        }
        else if (key == "Messages") {
            $.each(value, function (innerKey, innerValue) {
               console.log(innerValue);
           }
        }
        else if (key == "Errors") {
            $.each(value, function (innerKey, innerValue) {
               console.log(innerValue);
           }
        }
    });
    

    【讨论】:

    • 谢谢,效果很好!我最初尝试过类似的东西,但只是在做: $.each(value) { }});
    • 仅供参考,您的示例缺少结束标记,以防万一有人遇到问题。
    【解决方案2】:

    请不要使用 jQuery 循环数组。 Plain JS 效果很好,可以在所有框架中复用

    您可以测试类型并做出相应的反应

    const data = { "PagesCreated": 0, "AssetsCreated": 0, "AssetsUpdated": 0, "Messages": [ "Test message!", "Test message!", "Test message!" ], "Errors": [ "Test error!", "Test error!", "Test error!" ], "ElapsedTime": "00:00:00.0000382" };
    
    Object.entries(data).forEach(([key, value]) => {
      if (typeof value == "object") {
        console.log(key, value.join(", "))
      } else console.log(key, value)
    });

    jQuery 版本 - 唯一的区别是 $.each(data,(key, value) =&gt; {

    const data = { "PagesCreated": 0, "AssetsCreated": 0, "AssetsUpdated": 0, "Messages": [ "Test message!", "Test message!", "Test message!" ], "Errors": [ "Test error!", "Test error!", "Test error!" ], "ElapsedTime": "00:00:00.0000382" }
    
    $.each(data,(key, value) => { 
      if (typeof value == "object") {
        console.log(key, value.join(", "))
      } else console.log(key, value)
    });
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"&gt;&lt;/script&gt;

    【讨论】:

    • 感谢使用纯 js 的示例。替代品总是好的。然而,这个问题是特定于 jQuery 的,所以接受了另一个答案,因为它更相关。
    • 我添加了一个 jQuery 版本。我只需要更改为$.each(data,(key, value) =&gt; {
    猜你喜欢
    • 2018-06-20
    • 1970-01-01
    • 2022-05-12
    • 2021-11-24
    • 2021-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    相关资源
    最近更新 更多