首页 > 解决方案 > Javascript/jQuery 从每个循环中获取先前的数组值

问题描述

我有这些数据数组dataTimeName

{"imsak":"04:44","fajr":"04:54","sunrise":"06:15","dhuhr":"12:17","asr":"15:40","maghrib":"18:19","isha":"19:31"}

和 JS

$.each(dataTimeName,function(key, val)
{
    var current = "15:40";
    var previousArray = ""; //<-- how to get the previous from current?
});

我的问题是如何从当前列表中获取先前的15:40dataTimeName?这意味着,我将在is
之前获得先前的值。15:4012:17

var dataTimeName  = {"imsak":"04:44","fajr":"04:54","sunrise":"06:15","dhuhr":"12:17","asr":"15:40","maghrib":"18:19","isha":"19:31"};

$.each(dataTimeName,function(key, val)
{
  var current = "15:40";
  var previousArray = ""; //<-- how to get the previous from current?
  alert(val);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

标签: javascriptjquery

解决方案


您有一个排序数组,因此您可以访问它的先前索引:

let dataTimeName  = {"imsak":"04:44","fajr":"04:54","sunrise":"06:15","dhuhr":"12:17","asr":"15:40","maghrib":"18:19","isha":"19:31"};

let current = "15:40"

// sorted array
let item_index = Object.values(dataTimeName).findIndex(v=>v===current);
let previousArray=Object.entries(dataTimeName).filter((_,index)=>index<item_index);

console.log(previousArray);

// general
console.log(
  Object.entries(dataTimeName)
  .filter(([key,value])=>parseInt(value.replace(':', '')) < parseInt(current.replace(':', '')))
)

// And if you need the result be a json object like first one:

console.log(
  Object.entries(dataTimeName)
  .reduce((r,[key,value])=>{
      if (parseInt(value.replace(':', '')) < parseInt(current.replace(':', ''))) r[key]=value;
      return r;
    }
  ,{})
)

// And if you need only the previous time:
let prev = Object.values(dataTimeName).filter((_,index)=>index<item_index)?.pop();
console.log(prev);


推荐阅读