【问题标题】:Getting all keys & their values from nested objects in JSON array (w/out jQuery)从 JSON 数组中的嵌套对象获取所有键及其值(不带 jQuery)
【发布时间】:2014-08-27 04:23:40
【问题描述】:

JSON 新手询问:给定以下 json 数据:

{
    "Users": [
        {
            "userName": "Herbie",
            "dates & times": [
                { "2014.08.01": "120.0" },
                { "2014.08.02": "123.0" },
                { "2014.08.03": "126.0" }
            ]
        },
        {
            "userName": "Wayne",
            "dates & times": [
                { "2014.08.01": "120.0" },
                { "2014.08.02": "123.0" },
                { "2014.08.03": "126.0" }
            ]
        },
        {
            "userName": "Freddie",
            "dates & times": [
                { "2014.08.01": "120.0" },
                { "2014.08.02": "123.0" },
                { "2014.08.03": "126.0" }
            ]
        },
        {
            "userName": "Ron",
            "dates & times": [
                { "2014.08.01": "120.0" },
                { "2014.08.02": "123.0" },
                { "2014.08.03": "126.0" }
            ]
        },
        {
            "userName": "Tony",
            "dates & times": [
                { "2014.08.01": "120.0" },
                { "2014.08.02": "123.0" },
                { "2014.08.03": "126.0" }
            ]
        }
    ]
}

... 并希望检索指定用户的日期和时间数据以便可以呈现,例如:

Date 01: Time 01
Date 02: Time 02
Date 03: Time 03

我已经阅读了很多关于循环遍历数组和对象的内容,但是如果键是唯一的,我仍然对如何获取日期和时间(或任何键/值)感到困惑。到目前为止,我有这个:

var usersArray = myObj["Users"];
for (var user in usersArray){
    if (!usersArray[user].userName == selUser) {
        alert("user not found");
    }
    else if (usersArray[user].userName == selUser) {
        var datesAndTimesArray = usersArray[user]["dates & times"];
        console.log(selUser +"'s dates & times: " + datesAndTimesArray); // returns array of objects
    }
}

for (var someKey in datesAndTimesArray){
    // here's where I'm struggling, trying to get all the dates & times for the selected user, such that I can render it as described above
    // pseudo-code
}   

顺便说一句:学习 javascript,不使用 jquery 等。

非常感谢,

svs

【问题讨论】:

  • 去掉alert。如果您正在寻找Freddie,当循环查看 Herbie 和 Wayne 之前,您会提醒“未找到用户”。当你找到你想要的用户时使用break
  • 另外,使用for 循环来循环数组,而不是for..in
  • 不要使用 for ... in 循环在 JavaScript 中遍历数组。使用普通的for 循环和索引变量来显式计算属性,或者使用.forEach() 方法。
  • @Barmar 谢谢,但实际上我得到了选定的用户 :) 我要解决的问题是获取 sel 用户的所有(日期和时间)对象中的所有数据。感谢您使用 break 的提示。
  • 如果键是唯一的,date & time 应该是单个对象,而不是每个具有一个属性的对象数组。然后for (var someKey in datesAndTimesArray){ 就可以正常工作了。

标签: javascript json


【解决方案1】:

由于datesAndTimesArray 是一个对象数组,您需要一个嵌套循环来处理它。

for (var i in datesAndTimesArray) {
    var obj = datesAndTimesArray[i];
    for (var date in obj) {
        console.log('Date ' + date + ': Time' + obj[date]);
    }
}

日期和时间最好是单个对象而不是数组,例如

        "dates & times": {
            "2014.08.01": "120.0",
            "2014.08.02": "123.0",
            "2014.08.03": "126.0"
        }

那你只需要for (date in datesAndTimesArray)

【讨论】:

  • 再次感谢。您和 Felix 已经证实了我对如何格式化数据的怀疑(因此“JSON 新手询问”,并且已经以多种方式对其进行了格式化)。我也很欣赏我的 if 语句的提示;我对此也有点怀疑,但它被搁置了,因为它并没有阻止我努力获取数据;)
  • 附注使用 if (usersArray[user].userName != selUser) { alert("user not found"); } 正如你在上面所建议的,我的所有选择都出错了
  • 这就是我所说的会发生,这就是为什么你不应该做那个测试。
  • 如果您想知道是否找不到用户,请在循环末尾检查是否设置了datesAndTimesArray
猜你喜欢
  • 1970-01-01
  • 2020-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 2018-04-14
相关资源
最近更新 更多