考慮以下物件陣列:
const data = [
*{...more data from previous dates}*,
{
unixDate: 1650348034, //yesterday
dateTime: Tue Apr 19 2022 23:00:34,
severityLevel: 1,
severity: "Light"
},
{
unixDate: 1650348034, //yesterday
dateTime: Tue Apr 19 2022 14:00:34,
severityLevel: 3,
severity: "Moderate"
},
{
unixDate: 1650440700, //today
dateTime: Wed Apr 20 2022 15:45:00,
severityLevel: 2,
severity: "Moderate-Light"
},
{
unixDate: 1650442500, //today
dateTime: Wed Apr 20 2022 15:45:00,
severityLevel: 4,
severity: "Heavy"
},
{
unixDate: 1650427234, //today
dateTime: Wed Apr 20 2022 12:00:00,
severityLevel: 3,
severity: "Moderate"
}
]
我想回傳以下內容:
{
*///...records from previous dates,*
1650348034 : 2, //yesterday record taking only one of the unixtimestamp, and the average value of 'severityLevel'.
1650440700 : 3 //same as above but unixtimestamp is today.
}
我正在使用dayjs包來確定日期是否是今天,通過isToday插件,但想不出如何比較日期。data隨著它記錄新的讀數,它每天都在增長。我對 ES6 中的陣列過濾/減少方法不太熟悉,它們在這里有用嗎?任何幫助表示贊賞!
uj5u.com熱心網友回復:
您正在尋找的方法是 Array.map(),它很容易使用,您在陣列上呼叫它并提供一個函式,該函式將為每個索引回傳新資料,而原始資料在何時提供給函式自己。
要執行您希望執行的操作,您還必須使用 Object.fromEntries() 將陣列轉換為物件。這是您的操作方法:
let newData = Object.fromEntries(data.map((d)=>[d.unixDate, d.severityLevel]));
此代碼將首先將您的資料轉換為包含陣列的陣列,其中 0 索引是鍵,即時間戳,1 索引是該鍵的資料,即您的嚴重性級別。它看起來像這樣:
[
[1650348034,1],
[1650348034,3],
[1650440700,2],
[1650442500,4],
[1650427234,3]
]
然后它被轉換為你的物件
在這里查看更多資訊:
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/fromEntries
希望這可以幫助
uj5u.com熱心網友回復:
首先,您需要將這些 un??ix 時間轉換為 javascriptDate物件。然后你可以按年/月/日分組,然后平均結果。
const data = [
{
unixDate: 1650348034, //yesterday
dateTime: "Tue Apr 19 2022 23:00:34",
severityLevel: 1,
severity: "Light"
},
{
unixDate: 1650348034, //yesterday
dateTime: "Tue Apr 19 2022 14:00:34",
severityLevel: 3,
severity: "Moderate"
},
{
unixDate: 1650440700, //today
dateTime: "Wed Apr 20 2022 15:45:00",
severityLevel: 2,
severity: "Moderate-Light"
},
{
unixDate: 1650442500, //today
dateTime: "Wed Apr 20 2022 15:45:00",
severityLevel: 4,
severity: "Heavy"
},
{
unixDate: 1650427234, //today
dateTime: "Wed Apr 20 2022 12:00:00",
severityLevel: 3,
severity: "Moderate"
}
]
const x = Object.values(data.map(x => ({...x, dateTime: new Date(x.unixDate * 1000)}))
.reduce( (acc,i) => {
const key = "" i.dateTime.getFullYear() i.dateTime.getMonth() i.dateTime.getDate();
acc[key] = acc[key] || [];
acc[key].push(i);
return acc
},{}))
.map(x => ({
unixDate: x[0].unixDate,
severityLevel: x.reduce( (acc,i) => acc i.severityLevel,0) / x.length
}))
console.log(x)
如果該屬性dateTime已經是一個 JavaScript 日期,那么您可以不使用該data.map(x => ({...x, dateTime: new Date(x.unixDate * 1000)}))部分。
uj5u.com熱心網友回復:
好吧,我希望我正確地理解了你。這是一個如何實作與所需輸出類似的示例:
//input
const data = [
{
"unixDate": 1650348034, //yesterday
"dateTime": "Tue Apr 19 2022 23:00:34",
"severityLevel": 1,
"severity": "Light"
},
{
unixDate: 1650348034, //yesterday
dateTime: "Tue Apr 19 2022 14:00:34",
severityLevel: 3,
severity: "Moderate"
},
{
unixDate: 1650440700, //today
dateTime: "Wed Apr 20 2022 15:45:00",
severityLevel: 2,
severity: "Moderate-Light"
},
{
unixDate: 1650442500, //today
dateTime: "Wed Apr 20 2022 15:45:00",
severityLevel: 4,
severity: "Heavy"
},
{
unixDate: 1650427234, //today
dateTime: "Wed Apr 20 2022 12:00:00",
severityLevel: 3,
severity: "Moderate"
}
];
// ES6 computed property syntax
const arr = data.map(x => { return { [x.unixDate]: x.severityLevel }});
//output
console.log(arr.reduce(function(result, current) {
return Object.assign(result, current);
}, {}));
uj5u.com熱心網友回復:
獲取唯一的天數串列并根據計算的天數構建一個物件
const data = [ { unixDate: 1650348034, dateTime: "Tue Apr 19 2022 23:00:34", severityLevel: 1, severity: "Light" }, { unixDate: 1650348034, dateTime: "Tue Apr 19 2022 14:00:34", severityLevel: 3, severity: "Moderate" }, { unixDate: 1650440700, dateTime: "Wed Apr 20 2022 15:45:00", severityLevel: 2, severity: "Moderate-Light" }, { unixDate: 1650442500, dateTime: "Wed Apr 20 2022 15:45:00", severityLevel: 4, severity: "Heavy" }, { unixDate: 1650427234, dateTime: "Wed Apr 20 2022 12:00:00", severityLevel: 3, severity: "Moderate" } ]
//Get unique list of days
let unique = [... new Set(data.map(d => new Date(d.unixDate * 1000).toLocaleDateString("en-US")))];
//build object based on this list
let results = Object.fromEntries(unique.map(m => {
let records = data.filter(v => new Date(v.unixDate * 1000).toLocaleDateString("en-US") === m);
return [records[0].unixDate, records.reduce((v,o) => v =o.severityLevel, 0) / records.length ]
}));
console.log(results);
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/458857.html
標籤:javascript 数组 目的 ecmascript-6 天
