Javascript 在给定日期之前的数组中查找第一个严格的“最新”日期

Javascript 在给定日期之前的数组中查找第一个严格的“最新”日期,javascript,arrays,Javascript,Arrays,我有一个编辑了三项的数组:数组的排序不是按日期,任何日期都可以按任何顺序: [ { "amount": 10, "date": "2020-04-21", }, { "amount": 75, "date": "2020-04-22", }, { "amount": 100, "date": "2020-04-30", } ] 我试图创建一个vue函数,对于每个日期,它都返回上一个日期的金额 previousAmount(

我有一个编辑了三项的数组:数组的排序不是按日期,任何日期都可以按任何顺序:

[
  {
    "amount": 10,
    "date": "2020-04-21",
  },
  {
    "amount": 75,
    "date": "2020-04-22",
  },
  {
    "amount": 100,
    "date": "2020-04-30",
  }
]
我试图创建一个vue函数,对于每个日期,它都返回上一个日期的金额

previousAmount(givendate){
            var sum = []; // I need to use this for other purposes
            console.log(givendate) // print the current date the function is working on
            for (var i = 0; i < this.vuedataarray.length; i++) {
                if (givendate > this.vuedataarray[i].date) {
                    console.log(this.vuedataarray[i].date) // should only print the first date found before givendate, is printing ALL the dates before givendate
                    sum.push(this.vuedataarray[i].amount)
                };
            }
            console.log(sum)
}

如果给定日期为2020-04-30,那么sum将打印为[75,10],而不仅仅是[75],因为75是2020-04-22的金额,即2020-04-30之前的第一个日期,我希望实现的目标

我找到了一个能准确描述我想要实现的目标的数组,但使用的是一个只包含不带键的整数的简单数组和其他语言。

每次在数组中找到一个比给定日期早的日期时,你都在推求和,而不仅仅是在数组中找到给定日期之前的最新日期

您说过数组并不总是按日期顺序排列的,所以这意味着您必须始终循环遍历整个数组。您需要跟踪您认为可能是您需要的日期和金额,但如果您发现比给定日期更早的日期,请更新这些日期和金额:

function previousAmount(givendate) {
    const sum = [];
    let prevAmount, prevDate;
    for (const {amount, date} of vuedataarray) {
        if (date < givendate && (!prevDate || date > prevDate)) {
            prevAmount = amount;
            prevDate = date;
        }
    }
    if (prevDate) { // Checks we found one at all
        sum.push(prevAmount);
    }
    console.log(sum);
}
实例:

//注意:我已经更改了数组顺序,因此我们想要的是 //最后,秩序混乱 常数vuedataarray=[ { 金额:10, 日期:2020-04-21, }, { 金额:100, 日期:2020-04-30, }, { 金额:75, 日期:2020-04-22, } ]; 函数previousAmountgivendate{ 常数和=[]; 让我们预测金额、预测日期; 对于vuedataarray的常量{amount,date}{ 如果日期prevDate{ 金额=金额; prevDate=日期; } } 如果prevDate{//检查,我们发现了一个 金额; } console.logsum; }
之前的金额2020-04-30;//(75)数组是否总是按日期排序?对不起,我不能理解你的问题,你能解释一下吗?你的问题中的数组有日期顺序,最早的是第一个,中间的是第二个,最新的是第第三个。这总是真的吗?或者数组中的晚一天有时比早一天早吗?谢谢@T.J.Crowder,不,数组不会总是以这种方式排序,晚一天可以位于不同的位置,因为此数组模拟用户项,可以由idbrilliant随时创建,第一个很好,感谢您的回答和所有解释!