我正在尝试根据这些约束编写脚本以输出JSON。 到目前为止,我认为我的逻辑是正确的。
感谢您的帮助。
当前问题:
max/min
这是每个新对象应该出现的方式
let current_excursion = {
'device_sensor' : '',
'start_at' : [],
'stop_at' : 0,
'duration' : 0,
'type': '',
'max/min':0
}
device_sensor
在sId
上发现了这次旅行。
开始于
温度最先出现的日期和时间超出ISO_8601 format
中的范围。
stop_at
温度的日期和时间重新回到ISO_8601 format
的范围内。
持续时间 温度超出范围的总时间(以秒为单位)。
类型 字符串“ hot”或“ cold”取决于游览的类型。
最大/最小 漂移的极端温度。对于“热”偏移,这将是最大值;对于“冷”偏移,这将是最小值。
温度漂移事件开始 当温度超出范围并在温度恢复时结束 到范围。 对于“热”偏移,这是指温度高于8°C, 对于“冷”偏移,这是指温度低于2°C的情况。 如果两次出现不同类型的旅行 (“热”⇒“冷”或“冷”⇒“热”)请取两者的中点 时间戳记为第一次游览的结束和第二次游览的开始。
如果温度读数结束时发生偏移 请在最后一次阅读时结束游览(持续时间= 0)
这是测试数据的链接 Test Case Data
这是我到目前为止所写的内容:
const tempTypeTernary = (num) =>{
if(num < 2){
return 'cold'
} else if(num > 8){
return 'hot'
}
}
const excursion_duration = (x,y) =>{
let start = new Date(x) / 1000
let end = new Date(y) / 1000
return end - start
}
const reset_excursion = (obj) => {
Object.keys(obj).map(key => {
if (obj[key] instanceof Array) obj[key] = []
else obj[key] = ''
})
}
const list_excursion = (array) =>{
let result = [];
let max_min_excursion = 0;
let current_excursion = {
'device_sensor' : '',
'start_at' : [],
'stop_at' : 0,
'duration' : 0,
'type': '',
'max/min':0
}
for(let k = 0; k < array.length;k++){
if( array[k]['tmp'] < 2 || array[k]['tmp'] > 8){
current_excursion['device_sensor'] = array[k]['sId'];
current_excursion['start_at'] = [new Date(array[k]['time']).toISOString(),array[k]['time']];
current_excursion['type'] = tempTypeTernary(array[k]['tmp']);
if( array[k]['tmp'] > 2 || array[k]['tmp'] < 8){
current_excursion['stop_at'] = new Date(array[k]['time']).toISOString();
current_excursion['duration'] = excursion_duration(current_excursion['start_at'][1],array[k]['time'])
}
result.push(current_excursion)
reset_excursion(current_excursion)
}
}
return result
}
list_excursion(json)
答案 0 :(得分:0)
让我大胆尝试一下,只看一下代码就可以回答。请尝试以下方法:
4, 5, 6, 7