我希望从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"
}
]
以下是我的代码,用于检索hall
和hall.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
中的元素? 太谢谢你了!
在数据中查找ElistStartTime
和LatestEndTime
。 Math.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);
}
}