Javascript循环遍历数组并返回结束一系列值的对象

Javascript循环遍历数组并返回结束一系列值的对象,javascript,arrays,loops,Javascript,Arrays,Loops,我有一个如下所示的对象数组: let segment = [ {timestamp: "2020-09-23T14:01:59.425Z", jam_factor: 5.12002}, {timestamp: "2020-09-24T20:02:20.656Z", jam_factor: 3.13285}, {timestamp: "2020-09-24T21:02:28.307Z", jam_factor: 2.84637

我有一个如下所示的对象数组:

let segment = [
  {timestamp: "2020-09-23T14:01:59.425Z", jam_factor: 5.12002},
  {timestamp: "2020-09-24T20:02:20.656Z", jam_factor: 3.13285},
  {timestamp: "2020-09-24T21:02:28.307Z", jam_factor: 2.84637},
  {timestamp: "2020-09-24T22:04:09.648Z", jam_factor: 3.57281},
  {timestamp: "2020-09-24T23:02:10.257Z", jam_factor: 10},
  {timestamp: "2020-09-25T04:00:54.857Z", jam_factor: 10},
  {timestamp: "2020-09-25T05:01:47.202Z", jam_factor: 10},
  {timestamp: "2020-09-25T06:02:27.773Z", jam_factor: 10},
  {timestamp: "2020-09-25T07:01:43.621Z", jam_factor: 10},
  {timestamp: "2020-09-25T08:01:07.918Z", jam_factor: 10},
  {timestamp: "2020-09-25T09:02:48.843Z", jam_factor: 5.2812},
  {timestamp: "2020-09-25T10:02:44.509Z", jam_factor: 10},
  {timestamp: "2020-09-25T11:01:47.002Z", jam_factor: 10},
  {timestamp: "2020-09-25T12:02:46.718Z", jam_factor: 10},
  {timestamp: "2020-09-25T13:00:32.164Z", jam_factor: 10},
  {timestamp: "2020-09-28T05:02:44.037Z", jam_factor: 10},
  {timestamp: "2020-09-28T14:01:57.837Z", jam_factor: 10},
  {timestamp: "2020-09-29T11:01:34.661Z", jam_factor: 10},
  {timestamp: "2020-09-29T17:02:20.367Z", jam_factor: 10},
  {timestamp: "2020-09-29T18:02:23.282Z", jam_factor: 8.39212},
  {timestamp: "2020-09-29T19:00:39.818Z", jam_factor: 7.38261},
  {timestamp: "2020-09-30T03:01:49.720Z", jam_factor: 6.28182},
  {timestamp: "2020-09-30T05:01:35.621Z", jam_factor: 5.98176},
  {timestamp: "2020-09-30T06:00:27.023Z", jam_factor: 5.98176},
  {timestamp: "2020-09-30T07:03:00.132Z", jam_factor: 4.15984}
];

我想创建一个函数来循环这个数组,并过滤/返回结束(最小)三个较低值的条目(这是你的意思吗?我们仍然希望看到你自己的努力

const arr=[
{tz:1,jamfactor:10},
{tz:2,jamfactor:10},
{tz:3,jamfactor:7},
{tz:4,jamfactor:8},
{tz:5,jamfactor:9},
{tz:6,jamfactor:10},
{tz:7,jamfactor:10},
{tz:8,jamfactor:10},
{tz:9,jamfactor:8},
{tz:10,jamfactor:9},
{tz:11,jamfactor:10},
{tz:12,jamfactor:7},
{tz:13,jamfactor:8},
{tz:14,jamfactor:9},
{tz:15,jamfactor:10}
]
设cnt=0
const jf=arr.reduce((附件,项目)=>{
如果(cnt==3&&item.jamfactor>=10){
附件推送(项目)
cnt=0
}否则{
如果(项目系数<10)cnt++
如果(item.jamfactor>=10)cnt=0,则为else
}
返回acc;
}, [])

console.log(jf)
如果您的数组尚未按时间戳排序,请首先执行以下操作:

segment.sort((a,b) => a.timestamp.localeCompare(b.timestamp));
然后,如果我理解正确,您希望筛选结束三个较低值的条纹的条目,同时开始三个较高(10)值的条纹

编辑问题后,代码现在还会检测到相反的值(在三个较高的值之后,开始连续出现三个较低的值):

函数过滤器(段){
让结果=[];
让计数=0;
让prevIsTen,j;
for(设i=0;iconsole.log(filter(segment));
请访问,查看和。做一些研究,搜索与此相关的主题;如果遇到问题,请发布您的尝试,使用
[]记录输入和预期输出
snippet editor。发布代码,而不是代码的图片您到目前为止都尝试了什么?谢谢,这是正确的!但是,这也应该起到相反的作用(例如,过滤条目,结束三个较高(10)值的条纹,同时开始三个较低值的条纹。)好的,我在你原来的问题中没有读到这个要求。我相应地修改了我的答案。最后一个问题:向输出中添加一个额外变量的最佳方法是什么,以指示三个较低值的连续是结束(“开始”)还是开始(“结束”),如下面的示例所示。
[{“timestamp”:“2020-09-24T23:02:10.257Z”,“jam_factor”:10,“start_end”:“start”},{“timestamp”:“2020-09-29T18:02:23.282Z”,“jam_factor”:8.39212,“start_end”:“end”}]
您可以添加该属性,例如:
段[j]。start_end=“start”
。您需要精确指出何时放置“start”和何时放置“end”“作为价值,但我会让你来决定。如果你不能让它起作用,那么我建议你在一个新问题中提供所有信息。
segment.sort((a,b) => a.timestamp.localeCompare(b.timestamp));