javascript - Javascript循环检测一系列最少三个相同数字何时开始或结束
问题描述
我有一个看起来像这样的对象数组:
let data = [
{timestamp: "2020-09-23T14:01:59.425Z", value: 5.12002},
{timestamp: "2020-09-24T20:02:20.656Z", value: 3.13285},
{timestamp: "2020-09-24T21:02:28.307Z", value: 2.84637},
{timestamp: "2020-09-24T22:04:09.648Z", value: 3.57281},
{timestamp: "2020-09-24T23:02:10.257Z", value: 10},
{timestamp: "2020-09-25T04:00:54.857Z", value: 10},
{timestamp: "2020-09-25T05:01:47.202Z", value: 10},
{timestamp: "2020-09-25T06:02:27.773Z", value: 10},
{timestamp: "2020-09-25T07:01:43.621Z", value: 10},
{timestamp: "2020-09-25T08:01:07.918Z", value: 10},
{timestamp: "2020-09-25T09:02:48.843Z", value: 5.2812},
{timestamp: "2020-09-25T10:02:44.509Z", value: 10},
{timestamp: "2020-09-25T11:01:47.002Z", value: 10},
{timestamp: "2020-09-25T12:02:46.718Z", value: 10},
{timestamp: "2020-09-25T13:00:32.164Z", value: 10},
{timestamp: "2020-09-28T05:02:44.037Z", value: 10},
{timestamp: "2020-09-28T14:01:57.837Z", value: 10},
{timestamp: "2020-09-29T11:01:34.661Z", value: null},
{timestamp: "2020-09-29T17:02:20.367Z", value: null},
{timestamp: "2020-09-29T18:02:23.282Z", value: 8.49232},
{timestamp: "2020-09-29T19:00:39.818Z", value: 7.38261},
{timestamp: "2020-09-30T03:01:49.720Z", value: 6.28182},
{timestamp: "2020-09-30T05:01:35.621Z", value: null},
{timestamp: "2020-09-30T06:00:27.023Z", value: null},
{timestamp: "2020-09-30T07:03:00.132Z", value: null}
];
我想创建一个函数,该函数循环遍历该数组并返回所有以一系列最小三个较低(<10)或空值结束的条目,同时开始一系列(最小)三个较高值(10)。这也应该反过来工作(返回结束一系列三个较高值(10)的条目,同时开始连续三个较低或空值。)
在上面的示例中,所需的输出应该是一个包含以下两个对象的数组:
{timestamp: "2020-09-24T23:02:10.257Z", value: 10},
{timestamp: "2020-09-29T11:01:34.661Z", value: null}
到目前为止,已经提出了以下功能,但仍然不完整且不起作用。我是 javascript 编码的新手,所以非常感谢一些帮助
jfdetection = () => {
let result = [];
let count = 0;
for (let i = 0; i < data.length; i++) {
if (count === 3 && data.value === 10) {
result.push(data)
count = 0
} else {
if (data.value < 10) count ++
else if (data.value === 10) count = 0
}
return result;
}}
解决方案
与 Ben 的想法类似,您可以将整个输入映射到一个字符串,其中每个字符对应一个条目。然后使用正则表达式查找您要查找的模式的所有出现:
const regex = /000(?=111)|111(?=000)/g;
const peeks = (data) => Array.from(
data.map(({value}) => "01"[+(value === 10)]).join("").matchAll(regex),
match => data[match.index+3]
);
// demo
const data = [ {timestamp: "2020-09-23T14:01:59.425Z", value: 5.12002}, {timestamp: "2020-09-24T20:02:20.656Z", value: 3.13285}, {timestamp: "2020-09-24T21:02:28.307Z", value: 2.84637}, {timestamp: "2020-09-24T22:04:09.648Z", value: 3.57281}, {timestamp: "2020-09-24T23:02:10.257Z", value: 10}, {timestamp: "2020-09-25T04:00:54.857Z", value: 10}, {timestamp: "2020-09-25T05:01:47.202Z", value: 10}, {timestamp: "2020-09-25T06:02:27.773Z", value: 10}, {timestamp: "2020-09-25T07:01:43.621Z", value: 10}, {timestamp: "2020-09-25T08:01:07.918Z", value: 10}, {timestamp: "2020-09-25T09:02:48.843Z", value: 5.2812}, {timestamp: "2020-09-25T10:02:44.509Z", value: 10}, {timestamp: "2020-09-25T11:01:47.002Z", value: 10}, {timestamp: "2020-09-25T12:02:46.718Z", value: 10}, {timestamp: "2020-09-25T13:00:32.164Z", value: 10}, {timestamp: "2020-09-28T05:02:44.037Z", value: 10}, {timestamp: "2020-09-28T14:01:57.837Z", value: 10}, {timestamp: "2020-09-29T11:01:34.661Z", value: null}, {timestamp: "2020-09-29T17:02:20.367Z", value: null}, {timestamp: "2020-09-29T18:02:23.282Z", value: 8.49232}, {timestamp: "2020-09-29T19:00:39.818Z", value: 7.38261}, {timestamp: "2020-09-30T03:01:49.720Z", value: 6.28182}, {timestamp: "2020-09-30T05:01:35.621Z", value: null}, {timestamp: "2020-09-30T06:00:27.023Z", value: null}, {timestamp: "2020-09-30T07:03:00.132Z", value: null} ]
console.log(peeks(data))
推荐阅读
- css - 为什么导入的图标库的图标在VUE中不显示?
- git - 初始提交后如何在 Git 存储库中创建“主”分支?
- python-3.x - 如何使用相同的端口运行python脚本
- android - How to make this animation show in image below in android[Java]?
- swiftui - Highlight SwiftUI Button programmatically
- python - Convert dataframe column to datetime only if length of string is not zero
- boost - Boost Foot Print
- python - Python sql returning list
- python - Python: List all the files names containing the string as in its column name
- python - Python how can I import a variable from another file if it's in a function