【问题标题】:Sum previous date values to today Date将以前的日期值与今天的日期相加
【发布时间】:2021-07-04 16:29:55
【问题描述】:

我想计算以前的日期值到当前日期等等。这是我的脚本。

  • 我已经为初始 prevDayStock 获取了前一天的股票价值,即 let prevStock = 21
let prevStock = 21; 
let stocksArr= [
  { date: '2021-06-30',stock: 4 },
  { date: '2021-07-01',stock: 5 },
  { date: '2021-07-02',stock: 2 },
  { date: '2021-07-03',stock: 1 },
  { date: '2021-07-04', stock: 5 },
  { date: '2021-07-05',stock: 3 },
  { date: '2021-07-06', stock: 4 },
  { date: '2021-07-07',stock: 1 },
  { date: '2021-07-08', stock: 4 }
]

stocksArr.reduce((acc, cur, idx, arr) => {
  const prod = idx === 0 ? 0 : arr[idx - 1].stock;
  const value = acc + cur.stock + prod;
  cur.stock = acc;
  return value;
}, prevStock); 
  console.log(stocksArr)

预期结果:

    [{ date: '2021-06-30',stock: 21 },
      { date: '2021-07-01',stock: 24 },
      { date: '2021-07-02',stock: 29 },
      { date: '2021-07-03',stock: 31 },
      { date: '2021-07-04', stock: 32 },
      { date: '2021-07-05',stock: 37 },
      { date: '2021-07-06', stock: 40 },
      { date: '2021-07-07',stock: 44 },
      { date: '2021-07-08', stock: 45 }]

什么是正确的解决方案。

let prevStock = 21;
let stocksArr= [
  { date: '2021-06-30',stock: 4 },
  { date: '2021-07-01',stock: 5 },
  { date: '2021-07-02',stock: 2 },
  { date: '2021-07-03',stock: 1 },
  { date: '2021-07-04', stock: 5 },
  { date: '2021-07-05',stock: 3 },
  { date: '2021-07-06', stock: 4 },
  { date: '2021-07-07',stock: 1 },
  { date: '2021-07-08', stock: 4 }
]

stocksArr.reduce((acc, cur, idx, arr) => {
  const prod = idx === 0 ? 0 : arr[idx - 1].stock;
  const value = acc + cur.stock + prod;
  cur.stock = acc;
  return value;
}, prevStock); 
  console.log(stocksArr)

【问题讨论】:

    标签: javascript object ecmascript-6


    【解决方案1】:

    如果你想要累积结果,这里就是答案

        var stocksArr= [
          { date: '2021-06-30',stock: 4 },
          { date: '2021-07-01',stock: 5 },
          { date: '2021-07-02',stock: 2 },
          { date: '2021-07-03',stock: 1 },
          { date: '2021-07-04', stock: 5 },
          { date: '2021-07-05',stock: 3 },
          { date: '2021-07-06', stock: 4 },
          { date: '2021-07-07',stock: 1 },
          { date: '2021-07-08', stock: 4 }
        ]
        
    var result = stocksArr.reduce(function(r, a) {
      if (r.length > 0)
        a.stock += r[r.length - 1];
      r.push(a.stock);
      a['sum'] = a.stock
      return r;
    }, [21]); // <-- pass intialValue to here
    
        
        console.log(stocksArr)
        [
      {
        "date": "2021-06-30",
        "stock": 25,
        "sum": 25
      },
      {
        "date": "2021-07-01",
        "stock": 30,
        "sum": 30
      },
      {
        "date": "2021-07-02",
        "stock": 32,
        "sum": 32
      },
      {
        "date": "2021-07-03",
        "stock": 33,
        "sum": 33
      },
      {
        "date": "2021-07-04",
        "stock": 38,
        "sum": 38
      },
      {
        "date": "2021-07-05",
        "stock": 41,
        "sum": 41
      },
      {
        "date": "2021-07-06",
        "stock": 45,
        "sum": 45
      },
      {
        "date": "2021-07-07",
        "stock": 46,
        "sum": 46
      },
      {
        "date": "2021-07-08",
        "stock": 50,
        "sum": 50
      }
    ]
    

    【讨论】:

    • 感谢您的回答。相同的累积值应放在各自的日期。
    • SO 期望返回相同的对象数组。当你减少时注意,原始对象数组没有变异
    • @mplungjan 它必须采用我的初始化值 let prevStock = 21;
    • @underscore a= a.stock;这将代替 `a["sum"] = a.stock. I want notify you that my initial value is let prevStock = 21;` 它必须考虑第一个结果
    • @Jay 请检查更新后的代码。您可以在回调后简单地将 intialValue 传递给 reducer 函数
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    相关资源
    最近更新 更多