提问者:小点点

获取对象Javascript的对象中的元素


我希望从result检索hall及其length。 不幸的是,我无法检索出它,它显示undefined

以下是数据:

{
  "result": {
    "Hall 0": [
      {
        "lectureID": "1110000001",
        "startTime": "08:30:00",
        "endTime": "10:30:00"
      },
      {
        "lectureID": "1110000002",
        "startTime": "12:30:00",
        "endTime": "14:00:00"
      },
      {
        "lectureID": "1110000004",
        "startTime": "14:00:00",
        "endTime": "16:00:00"
      }
    ],

    "Hall 1": [
      {
        "lectureID": "1110000003",
        "startTime": "08:00:00",
        "endTime": "09:00:00"
      }
    ],
    "Hall 2": [
      {
        "lectureID": "1110000006",
        "startTime": "09:00:00",
        "endTime": "11:00:00"
      }
    ],
    "Hall 3": [
      {
        "lectureID": "1110000007",
        "startTime": "08:30:00",
        "endTime": "11:00:00"
      }
    ]

以下是我的代码,用于检索hallhall.length中的元素:

 for (let i = 0; i < Object.keys(result).length; i++) {
        console.log("result: ",result[`Hall ${i}`]);  //this line shows undefined
        console.log(result[`Hall ${i}`].length);    //this line is undefined
        for (let j = 0; j < result[`Hall ${i}`].length; j++) {
            const lecture = result[`Hall ${i}`][j];
            const startTime = lecture.startTime;
            const endTime = lecture.endtime;
            earliestStartTime = Math.min(earliestStartTime, startTime);
            latestEndTime = Math.max(latestEndTime, endTime);
        }
    }

请问如何获取result中的对象以及hall中的元素? 太谢谢你了!


共3个答案

匿名用户

在数据中查找ElistStartTimeLatestEndTimeMath.min无法与String一起工作,因此需要使用自定义比较函数CompareTime。 使用Object.Values对每个属性进行迭代,并使用reduce查找最小值和最大值。

null

const toSeconds = time => {
    const a = time.split(':');
    return +a[0] * 60 * 60 + +a[1] * 60 + +a[2];
};

const compareTime = (a, b, direction) => {
    const a1 = toSeconds(a);
    const b1 = toSeconds(b);

    return direction ? (a1 > b1 ? a : b) : a1 < b1 ? a : b;
};

const result = {
    'Hall 0': [
        { lectureID: '1110000001', startTime: '08:30:00', endTime: '10:30:00' },
        { lectureID: '1110000002', startTime: '12:30:00', endTime: '14:00:00' },
    ],
    'Hall 1': [{ lectureID: '1110000003', startTime: '08:00:00', endTime: '09:00:00' }],
    'Hall 2': [{ lectureID: '1110000006', startTime: '09:00:00', endTime: '11:00:00' }],
    'Hall 3': [{ lectureID: '1110000008', startTime: '09:00:00', endTime: '12:00:00' }],
};

const res = Object.values(result).reduce(
    (acc, arr) => {
        arr.forEach(lecture => {
            const startTime = lecture.startTime;
            const endTime = lecture.endTime;
            acc.earliestStartTime = compareTime(acc.earliestStartTime, startTime, false);
            acc.latestEndTime = compareTime(acc.latestEndTime, endTime, true);
        });

        return acc;
    },
    {
        earliestStartTime: '25:00:00',
        latestEndTime: '00:00:00',
    },
);

console.log(res);

匿名用户

只需使用object.values访问值,因为您根本不使用键:

Object.values(result.result)
  .map(lectures => ({
    earliestStartTime: lectures.map(x => x.startTime).reduce((x, y) => x < y ? x : y),
    latestEndTime: lectures.map(x => x.endTime).reduce((x, y) => x > y ? x : y)
  }));

null

var result = {
  "result": {
    "Hall 0": [
      {
        "lectureID": "1110000001",
        "startTime": "08:30:00",
        "endTime": "10:30:00"
      },
      {
        "lectureID": "1110000002",
        "startTime": "12:30:00",
        "endTime": "14:00:00"
      },
      {
        "lectureID": "1110000004",
        "startTime": "14:00:00",
        "endTime": "16:00:00"
      }
    ],
    "Hall 1": [
      {
        "lectureID": "1110000003",
        "startTime": "08:00:00",
        "endTime": "09:00:00"
      }
    ],
    "Hall 2": [
      {
        "lectureID": "1110000006",
        "startTime": "09:00:00",
        "endTime": "11:00:00"
      }
    ],
    "Hall 3": [
      {
        "lectureID": "1110000007",
        "startTime": "08:30:00",
        "endTime": "11:00:00"
      }
    ]
  }
};

var times = Object.values(result.result)
    .map(lectures => ({
      earliestStartTime: lectures.map(x => x.startTime).reduce((x, y) => x < y ? x : y),
      latestEndTime: lectures.map(x => x.endTime).reduce((x, y) => x > y ? x : y)
    }));
    
console.log(times);

匿名用户

您似乎在对象/数组的循环上遇到了麻烦,我建议您重新启动javascript基础,并查看下面的示例

null

var object = {
  "result": {
    "Hall 0": [
      {
        "lectureID": "1110000001",
        "startTime": "08:30:00",
        "endTime": "10:30:00"
      },
      {
        "lectureID": "1110000002",
        "startTime": "12:30:00",
        "endTime": "14:00:00"
      },
      {
        "lectureID": "1110000004",
        "startTime": "14:00:00",
        "endTime": "16:00:00"
      }
    ],

    "Hall 1": [
      {
        "lectureID": "1110000003",
        "startTime": "08:00:00",
        "endTime": "09:00:00"
      }
    ],
    "Hall 2": [
      {
        "lectureID": "1110000006",
        "startTime": "09:00:00",
        "endTime": "11:00:00"
      }
    ],
    "Hall 3": [
      {
        "lectureID": "1110000007",
        "startTime": "08:30:00",
        "endTime": "11:00:00"
      }
    ]}};

var result = object.result;

for (var i in result) {
      console.log(i);
      console.log(result[i]);  //this line shows undefined
      console.log(result[i].length);    //this line is undefined
      for (let j = 0; j < result[i].length; j++) {
          const lecture = result[i][j];
          console.log(lecture);
      }
  }