我的問題是資料操作。
假設我有多個資料陣列,其結構如下:
[
[timestamp1, value1],
[timestamp2, value2],
[timestamp3, value3],
...
[timestampN, valueN]
]
使用真實資料,它可能看起來像這樣:
[
[1637837518000, 1.7],
[1637837519000, 0.1],
[1637837520000, 1.3],
...
[1637837600000, 2.2]
]
我需要將多個這樣的陣列合并為一個,如果時間軸匹配,這很容易。如果我有例如三個短樣本陣列:
const arr1 = [
[1637837518000, 1.7],
[1637837519000, 0.1],
[1637837520000, 1.3]
];
const arr2 = [
[1637837518000, 4.5],
[1637837519000, 0.3],
[1637837520000, 7.2],
];
const arr3 = [
[1637837518000, 1.2],
[1637837519000, 2.1],
[1637837520000, 3.0]
];
它們將被合并到以下陣列中,保留共同的時間軸:
[
[1637837518000, 1.7, 4.5, 1.2],
[1637837519000, 0.1, 0.3, 2.1],
[1637837520000, 1.3, 7.2, 3.0]
]
這很簡單,但是如果陣列的長度不同,其中一些陣列在時間戳上有一個資料點而其他陣列沒有,那么執行這種決議的最有效方法是什么?我需要一個有效的解決方案,因為可能有大量資料,而緩慢的決議會導致糟糕的用戶體驗。此外,時間戳應該在結果陣列中按順序排列。可以預期,在單個陣列中,時間戳是有序的。
我試圖解決的問題的示例資料:
const arr1 = [
[1637837518000, 1.7],
[1637837519000, 0.1],
[1637837520000, 1.3],
[1637837521000, 6.4],
[1637837522000, 2.2],
[1637837523000, 2.1]
];
const arr2 = [
[1637837517000, 600.32],
[1637837520000, 578.98],
[1637837523000, 612.76]
];
const arr3 = [
[1637837518000, 45.3],
[1637837520000, 34.8],
[1637837522000, 40.0],
[1637837524000, 41.5]
];
期望的結果是:
[
[1637837517000, null, 600.32, null],
[1637837518000, 1.7, null, 45.3],
[1637837519000, 0.1, null, null],
[1637837520000, 1.3, 578.98, 34.8],
[1637837521000, 6.4, null, null],
[1637837522000, 2.2, null, 40.0],
[1637837523000, 2.1, 612.76, null],
[1637837524000, null, null, 41.5]
]
不需要插值,所以如果時間戳不存在于任何資料陣列中,則該時間戳的結果陣列中不需要任何條目。
uj5u.com熱心網友回復:
以下應合理有效地解決問題:
const arr1 = [
[1637837518000, 1.7],
[1637837519000, 0.1],
[1637837520000, 1.3],
[1637837521000, 6.4],
[1637837522000, 2.2],
[1637837523000, 2.1]
];
const arr2 = [
[1637837517000, 600.32],
[1637837520000, 578.98],
[1637837523000, 612.76]
];
const arr3 = [
[1637837518000, 45.3],
[1637837520000, 34.8],
[1637837522000, 40.0],
[1637837524000, 41.5]
];
function concat(...arrs){
const result = {};
for(var i=0;i<arrs.length;i ){
for(let [ts,val] of arrs[i]){
result[ts] = result[ts] || new Array(arrs.length 1).fill(null);
result[ts][0] = ts;
result[ts][i 1] = val;
}
}
return Object.values(result).sort( (a,b) => a[0] - b[0]);
}
console.log(concat(arr1,arr2,arr3));
uj5u.com熱心網友回復:
我希望這可能有助于看起來不那么漂亮
但即使輸入 10000 個引數它也能完成作業
注意:引數的順序很重要
function concatTimeZones() {
const allTimeZones = []
var baseArray = Array.apply(null, Array(arguments.length 1)).map(function () { return null });
for (let element in arguments) {
for (let timezone in arguments[element]) {
let item = arguments[element][timezone];
let newItem = [...baseArray]
newItem[0] = item[0];
newItem[Number(element) 1] = item[1];
allTimeZones.push(newItem);
}
}
let sorted = allTimeZones.sort(function (a, b) {
return a[0] - b[0]
})
return sorted
}
concatTimeZones(arr1, arr2, arr3, arr4)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/365827.html
標籤:javascript 数组
上一篇:通過滑動視窗重復Numpy陣列
