首页 > 解决方案 > 根据咨询时间拆分时间并将对象推送到数组 - Javascript

问题描述

我有这样的对象数组(假设大数组)

[
  {
    userID: '25634076cc1fccb0978ciug9f8f8b59cf7e6e0b0615d00de4df7e233bdb0d399',
    consultationTime: 4200 // in seconds
  },
  {
    userID: '48e69555d778f9b9a3a1d553b9c3b8f7dd6a3394ac82df1433b60a69c055d23d',
    consultationTime: 198741 // in seconds
  },
  {
    userID: 'a75d2f0a583b29ddba803af2a02ae1ee3b7b2c112fff8f41707aa9bb9aac9c90',
    consultationTime: 10 // in seconds
  }
];

要求:我需要将咨询时间转换为分钟。然后如果consultationTime 少于20 分钟,那么我需要将带有代码“11”的consultationTime 推送到billingDetails。如果consultationTime大于20分钟,则需要拆分剩余时间并将时间推送到编码“22”为对象数组。剩余时间属性将通过减去总时间来计算。

示例:对于 4200 秒(70 分钟),前 20 分钟转到代码 11,其余 50 分钟转到代码 22,因为对象数组包含第一个对象包含 20、下一个 20、下一个 10,如输出所示。

预期输出:

[
{
userID: '25634076cc1fccb0978ciug9f8f8b59cf7e6e0b0615d00de4df7e233bdb0d399',
billingDetails: [{
code: 11,
totalTime: 20 // first 20 minutes
remainingTime: 0 // 20 mins - totalTime
},
{
code: 22,
totalTime: 20
remainingTime: 0
},
{
code: 22,
totalTime: 20 
remainingTime: 0
},
{
code: 22,
totalTime: 10
remainingTime: 10 (20 minutes - 10 minutes)
}
]
},
{... similarly for other users},
];

我很难得出相同的逻辑。所以任何帮助将不胜感激。

标签: javascriptnode.jsarraysecmascript-6

解决方案


const inputArray = [
  {
    userID: "25634076cc1fccb0978ciug9f8f8b59cf7e6e0b0615d00de4df7e233bdb0d399",
    consultationTime: 4200,
  },
  {
    userID: "48e69555d778f9b9a3a1d553b9c3b8f7dd6a3394ac82df1433b60a69c055d23d",
    consultationTime: 198741,
  },
  {
    userID: "a75d2f0a583b29ddba803af2a02ae1ee3b7b2c112fff8f41707aa9bb9aac9c90",
    consultationTime: 10,
  },
];

function splitTimeAndPush(inputArray) {
  let outputArray = [];
  inputArray.forEach((element) => {
    let output = { userId: element.userID, billingDetails: [] };
    let minutes = element.consultationTime / 60; // consultaionTime in minutes
    for (let i = 0; i < minutes; i += 20) {
      let bD = { code: "", totalTime: "", remainingTime: "" };
      if (i === 0) {
        bD.code = 11;
      } else {
        bD.code = 22;
      }
      bD.totalTime = minutes - i > 20 ? 20 : minutes - i;
      bD.remainingTime = 20 - bD.totalTime;
      output.billingDetails.push(bD);
    }
    outputArray.push(output);
  });
  return outputArray;
}

const sp = splitTimeAndPush(inputArray);
console.log(sp);


推荐阅读