如何拆分 JavaScript 多维数组并获取最后一个数组?

Posted

技术标签:

【中文标题】如何拆分 JavaScript 多维数组并获取最后一个数组?【英文标题】:How to split JavaScript mult-dimension array and get last array? 【发布时间】: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 【参考方案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数组中的前一项。 对不起,我不明白。请发布您自己的答案以根据您显示正确的值。我刚刚醒来,所以也许我太困了

以上是关于如何拆分 JavaScript 多维数组并获取最后一个数组?的主要内容,如果未能解决你的问题,请参考以下文章

获取拆分字符串数组的最后一个元素

如何从多维数组中获取每个索引的最大值-javascript

拆分字符串并获取最后一个元素

JavaScript:自动对可变多维数组进行对角排序

如果javascript中不存在值,如何推送到多维数组

从 JavaScript 中的多维数组中获取数组值