【问题标题】:How does one access properties within a nested array and object data structure?如何访问嵌套数组和对象数据结构中的属性?
【发布时间】:2021-08-03 19:13:59
【问题描述】:

如何访问嵌套数组和对象数据结构中的属性。

我希望访问对象的sub 属性中的数据。但是,正如您所见,子属性值也具有特征对象。所以这是我的代码,我使用循环访问该对象中的属性,如下所示:

[{
  updateTime: '2021-08-01T10:31:12.997Z',
  state: 'PUBLISHED',
  description: '[Assignment Link]',
  creationTime: '2021-08-01T10:00:32.502Z',
  creatorUserId: '100720723991781953762',
  maxPoints: 100,
  assigneeMode: 'ALL_STUDENTS',
  title: 'Chapter 10 - Challenge - Sounds',
  topicId: '371133499749',
  dueTime: {
    hours: 12,
    minutes: 29
  },
  courseId: '359355912330',
  dueDate: {
    year: 2021,
    day: 2,
    month: 8
  },
  submissionModificationMode: 'MODIFIABLE_UNTIL_TURNED_IN',
  alternateLink: 'Links',
  id: '375299410585',
  workType: 'ASSIGNMENT',
  sub: {
    '101319245169270376329': [Object],
    '113602874081893916075': [Object],
    '109482297400381284245': [Object],
    '116018616608318973354': [Object],
    '113664444807142890993': [Object],
    '114971581068847820301': [Object],
    '102115961232295542434': [Object],
    '101379903617328602973': [Object],
    '110645572827894944226': [Object],
    '116196654365604694016': [Object],
    '111060187005391455662': [Object],
    '109231821126887264833': [Object],
    '111638802824371384480': [Object],
    '107268429707932588376': [Object],
    '113020667154770187233': [Object],
    '102653891403954041925': [Object],
    '105324491423107091552': [Object],
    '101716831976886159513': [Object],
    '100197750836727383685': [Object],
    '109019166529420617094': [Object],
    '115372484470281534681': [Object],
    '114443976641819242498': [Object]
  }
}]

我正在尝试在此处访问对象的这个后期属性和其他属性。在这里,我使用以下代码向您展示这个示例。

console.log(courseWork[0].sub);

但是,当我尝试访问它的子属性(例如 late 或 state)时,我没有得到它们,并且我在控制台中得到一个 undefined ,如下所示:

console.log(courseWork[0].sub.late);
{
  alternateLink: 'Links',
  courseWorkType: 'ASSIGNMENT',
  courseId: '359355912330',
  assignmentSubmission: {},
  userId: '101319245169270376329',
  courseWorkId: '375299410585',
  id: 'Cg0I9eKUzyYQmZXajPYK',
  submissionHistory: [Object],
  state: 'CREATED',
  late: true,
  creationTime: '2021-08-01T10:31:45.071Z',
  updateTime: '2021-08-01T10:31:45.036Z'
}

现在我是 javascript 和 appscript 的新手,从未处理过如此大的数据和对象。如何访问此级别的数据。

【问题讨论】:

  • 请将示例数据以文本形式发布。
  • @Unmitigated 很抱歉,我现在会以块引用格式这样做。
  • @Unmitigated 进行了编辑,您可以看到它。
  • console.log(courseWork[0].sub['101319245169270376329'].late) 应该是true 我认为
  • 我不明白你的问题。您的问题是说您正在尝试访问名为true 的属性? console.log(courseWork[0].sub.true); 在您粘贴的示例对象中,我没有看到名为 true 的属性。

标签: javascript arrays object data-structures


【解决方案1】:

请查阅Object.keysObject.valuesObject.entries的文档...

var obj = {
  sub: {
    '101319245169270376329': { late: true },
    '113602874081893916075': { late: true },
    '109482297400381284245': { late: false },
    '116018616608318973354': { late: true },
    '113664444807142890993': { late: true },
    '114971581068847820301': { late: false },
    '102115961232295542434': { late: true },
    '101379903617328602973': { late: false },
  }
};

Object
  .entries(obj.sub)
  .forEach(([key, value]) =>
    console.log(`'${ key }' ... late: ${ value.late }`)
  );
Object
  .values(obj.sub)
  .forEach(item => console.log(`late: ${ item.late }`));
.as-console-wrapper { min-height: 100%!important; top: 0; }

【讨论】:

  • 在尝试后也会回复您,如果这似乎也是一个不错的答案。感谢您花时间在上面。
【解决方案2】:

var obj = {
        updateTime: '2021-08-01T10:31:12.997Z',
        state: 'PUBLISHED',
        description: '[Assignment Link]',
        creationTime: '2021-08-01T10:00:32.502Z',
        creatorUserId: '100720723991781953762',
        maxPoints: 100,
        assigneeMode: 'ALL_STUDENTS',
        title: 'Chapter 10 - Challenge - Sounds',
        topicId: '371133499749',
        dueTime: {
            hours: 12,
            minutes: 29
        },
        courseId: '359355912330',
        dueDate: {
            year: 2021,
            day: 2,
            month: 8
        },
        submissionModificationMode: 'MODIFIABLE_UNTIL_TURNED_IN',
        alternateLink: 'Links',
        id: '375299410585',
        workType: 'ASSIGNMENT',
        sub: {
            '101319245169270376329': {
                alternateLink: 'Links',
                courseWorkType: 'ASSIGNMENT',
                courseId: '359355912330',
                assignmentSubmission: {},
                userId: '101319245169270376329',
                courseWorkId: '375299410585',
                id: 'Cg0I9eKUzyYQmZXajPYK',
                submissionHistory: {},
                state: 'CREATED',
                late: true,
                creationTime: '2021-08-01T10:31:45.071Z',
                updateTime: '2021-08-01T10:31:45.036Z'
              },
            '113602874081893916075': {},
            '109482297400381284245': {},
            '116018616608318973354': {},
            '113664444807142890993': {},
            '114971581068847820301': {},
            '102115961232295542434': {},
            '101379903617328602973': {},
            '110645572827894944226': {},
            '116196654365604694016': {},
            '111060187005391455662': {},
            '109231821126887264833': {},
            '111638802824371384480': {},
            '107268429707932588376': {},
            '113020667154770187233': {},
            '102653891403954041925': {},
            '105324491423107091552': {},
            '101716831976886159513': {},
            '100197750836727383685': {},
            '109019166529420617094': {},
            '115372484470281534681': {},
            '114443976641819242498': {}
        }
    };

console.log(obj.sub['101319245169270376329'].late); // output: true

【讨论】:

  • 感谢您的时间尤里。会试一试,如果成功的话会回复你。
  • 只需修改幻灯片,您建议的答案就适用于 Yuri。感谢您的时间。我需要将我的代码更改为此才能正常工作。 console.log(courseWork[0].sub['101319245169270376329'][0].late);虽然我接受你的回答。
  • 这正是关于数据样本部分的连接方式:sub:{'123':{}}sub:'{123':[{}]}。问题不是很清楚。
  • 如果我不能以适当的方式解释它,那我很糟糕。谢谢你的时间,虽然尤里。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-08
  • 2020-07-13
  • 2019-09-03
  • 2021-09-26
  • 2016-07-13
相关资源
最近更新 更多