作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用一个键控对象,该对象代表时间表数据,特别是特定“行程”的各种停靠站的计时点
所以目前我得到了一个停止位置列表以及一个行程列表,如下所示:
var locations = [{id: 0, name: 'A'},{id: 1, name: 'B'},{id: 2, name: 'C'},{id: 3, name: 'D'}]
var trips = [{
times: {
'0': '06:00',
'1': '06:30'
}
}, {
times: {
'1': '07:00',
'2': '07:30',
'4': '08:45'
}
}, {
times: {
'1': '07:45',
'3': '09:00'
}
}];
我想要做的是,如果行程不访问特定站点,则添加一个新的键控项,但使用空字符串值,使用未访问的站点 ID 作为键值。
所以我想最终得到像这样转换后的对象:
var trips = [{
times: {
'0': '06:00',
'1': '06:30',
'2': '',
'3': '',
'4': ''
}
}, {
times: {
'0': '',
'1': '07:00',
'2': '07:30',
'3': ''
'4': '08:45'
}
}, {
times: {
'0': '',
'1': '07:45',
'2': '',
'3': '09:00',
'4': ''
}
}];
我正在考虑循环遍历每个 times
对象中的键,并与前一个键进行比较,以查看键值之间的差距,这样我就可以尝试计算出有多少个键插入 - 但使用像 Object.keys(...) 这样的东西并不能保证键的迭代顺序,所以我看不出这对我有帮助。
我能想到的唯一其他方法是将对象转换为稀疏数组,并使用原始对象的键来知道在什么位置添加数组项,然后用空值填充数组的间隙我需要。
有人可以在这里提供有关最佳方法的建议吗?谢谢
最佳答案
你是对的,你不能依赖按键的顺序,但你可以使用 Array.prototype.includes 来查看你的行程是否缺少特定位置。可能有更聪明的方法,但这似乎有效:
var locations = [{id: 0, name: 'A'},{id: 1, name: 'B'},{id: 2, name: 'C'},{id: 3, name: 'D'}]
var trips = [{
times: {
'0': '06:00',
'1': '06:30'
}
}, {
times: {
'1': '07:00',
'2': '07:30',
'4': '08:45'
}
}, {
times: {
'1': '07:45',
'3': '09:00'
}
}];
// create an array of all the location ids
var locationIds = [];
locations.forEach(function(location){
locationIds.push('' + location.id); // convert to string before pushing because your `times` objects' keys are strings
});
trips.forEach(function(trip) {
// here are all the trips already defined:
var existingTrips = Object.keys(trip.times);
// then iterate over all locations to add the new elements where they don't exist
locationIds.forEach(function(locationId) {
// so if we don't have a trip, add a blank one!
if (!existingTrips.includes(locationId)) {
trip.times[locationId] = '';
}
})
});
console.log(trips);
关于javascript - 使用额外项目修改顺序键控对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51023549/
我是一名优秀的程序员,十分优秀!