【问题标题】:How to split JavaScript mult-dimension array and get last array?如何拆分 JavaScript 多维数组并获取最后一个数组?
【发布时间】:2021-07-25 02:31:39
【问题描述】:

我有一个包含以下时间序列数据的数组。如何将数组拆分为 60 毫秒(不大于)的间隔并获取最后一个数组?

[
[1619932533,1781.85],
[1619932540,1781.72],
[1619932554,1781.99],
[1619932559,1783.84],
[1619932564,1783.02],
[1619932567,1780.38],
[1619932571,1780.52],
[1619932577,1780.38],
[1619932580,1783.07],
[1619932581,1782.17],
[1619932581,1782.17],
[1619932601,1782.95],
[1619932612,1782.7],
[1619932614,1782.82],
[1619932626,1782.82],
[1619932653,1784.12],
.....
]

我需要这样的最终数据吗?

[
[1619932533,1781.85],
[1619932581,1782.17],
[1619932653,1784.12]
]

*根据第一个值 1619932533 和 +60 进行拆分,然后继续......

【问题讨论】:

  • 请添加您尝试过的代码。添加一个循环,将当前值与循环中的上一项和输出中的最后一项进行比较。
  • 第一次是17:58:52.533,最后一次是17:58:52.653 - 它们之间没有60秒。你的意思是毫秒?
  • @mplungjan 1619932533 + 601619932593。该范围内的最大数字是1619932581

标签: javascript node.js arrays multidimensional-array


【解决方案1】:

请尝试使用此代码。

var myObj, curr_time;
myObj = [[1619932533,1781.85],
         [1619932540,1781.72],
         [1619932554,1781.99],
         [1619932559,1783.84],
         [1619932564,1783.02],
         [1619932567,1780.38],
         [1619932571,1780.52],
         [1619932577,1780.38],
         [1619932580,1783.07],
         [1619932581,1782.17],
         [1619932581,1782.17],
         [1619932601,1782.95],
         [1619932612,1782.7],
         [1619932614,1782.82],
         [1619932626,1782.82],
         [1619932653,1784.12]];
curr_time = myObj[0][0];
var result = [];
result.push(myObj[0])
for (i = 1; i < myObj.length; i++) {
  if (myObj[i][0] - curr_time > 60) {
    result.push(myObj[i]);
    curr_time = myObj[i][0];
  }  
}
console.log('result', result);

【讨论】:

    【解决方案2】:

    也许是这个?我只得到两个相隔 60 毫秒的结果

    const data = [
    [1619932533,1781.85],
    [1619932540,1781.72],
    [1619932554,1781.99],
    [1619932559,1783.84],
    [1619932564,1783.02],
    [1619932567,1780.38],
    [1619932571,1780.52],
    [1619932577,1780.38],
    [1619932580,1783.07],
    [1619932581,1782.17],
    [1619932581,1782.17],
    [1619932601,1782.95],
    [1619932612,1782.7],
    [1619932614,1782.82],
    [1619932626,1782.82],
    [1619932653,1784.12]
    ]
    
    const times = data.reduce((acc,arr) => {
      const [d,val] = arr;
      if (acc.length===0) acc.push(arr)
      else if (d - acc[acc.length-1][0] >= 60) acc.push(arr)
      return acc
    },[])
    console.log(times)

    【讨论】:

    • 如果d - acc[acc.length-1][0] &gt;= 60,您需要获取data[i-1]并将其推送到输出(您必须使用第三个i参数来减少回调)
    • 为什么? acc[acc.length-1] 包含数据中最后保存的值
    • 条件正确。需要推送到acc的项是data数组中的前一项。
    • 对不起,我不明白。请发布您自己的答案以根据您显示正确的值。我刚刚醒来,所以也许我太困了
    猜你喜欢
    • 2017-09-02
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多