簡體   English   中英

可以使用Array.prototype方法完成此功能嗎

[英]Can this function be done with Array.prototype method

我正在嘗試采用新的Array.prototype函數,並且想知道如何用它來完成此代碼。

目標是從原始對象數組中以數組的形式返回每12個對象的平均值。

var WeatherData = [{tm:0,t:22,h:15,p:537}..
var AverageWeather = []; 
var temp = 0;

for (i = 0; i < WeatherData.length; i++) {

    temp += WeatherData[i].t;
    if ((i+1) % 12 == 0) {
    AverageWeather.push( Math.round((temp / 12) * 100) / 100 );
    Temp = 0;
    }
}

console.log(AverageWeather);

小提琴: https//jsfiddle.net/xd2v62rL/

Array.prototype.getAverageWeather = function() {
    var AverageWeather = []; 
    var temp = 0;

    for (i = 0; i < this.length; i++) {

        temp += this[i].t;
        if ((i+1) % 12 == 0) {
      AverageWeather.push( Math.round((temp / 12) * 100) / 100 );
        Temp = 0;
        }
    }

    return AverageWeather;
}

var WeatherData = [{tm:0,t:22,h:15,p:537},{tm:5,t:13,h:42,p:895},{tm:10,t:21,h:36,p:582},{tm:15,t:22,h:51,p:986},{tm:20,t:21,h:36,p:902},{tm:25,t:22,h:58,p:439},{tm:30,t:16,h:57,p:1042},{tm:35,t:20,h:14,p:480},{tm:40,t:20,h:34,p:958},{tm:45,t:17,h:7,p:403},{tm:50,t:13,h:69,p:460},{tm:55,t:20,h:36,p:967},{tm:60,t:19,h:57,p:419},{tm:65,t:18,h:43,p:746},{tm:70,t:17,h:49,p:344},{tm:75,t:16,h:90,p:651},{tm:80,t:19,h:96,p:646},{tm:85,t:19,h:3,p:301},{tm:90,t:14,h:96,p:770},{tm:95,t:17,h:54,p:1036},{tm:100,t:15,h:79,p:890},{tm:105,t:22,h:32,p:1041},{tm:110,t:22,h:67,p:415},{tm:115,t:20,h:82,p:616}];

console.log(WeatherData.getAverageWeather());

這樣,您可以將函數附加到Array原型。

您可以為此組合reduce和map

 let averages = WeatherData
 .reduce(groupInto12, [])
 .map(getAverage);

function groupInto12(rows, key, index){
    if(index % 12 === 0)
       rows.push([key])
    else
       rows[rows.length-1].push(key)
       return rows;
}
function getAverage (tempfor12days) {
  let totalTemp = tempfor12days.reduce((acc,val)=>acc+val.t,0);
  return Math.round((totalTemp / 12) * 100) / 100;
 }

當您在嘗試計算平均值之前將數據分成12組時,使用Array.prototype方法map reduce等可以輕松解決此問題:

var weatherData = [{tm:0,t:22,h:15,p:537},{tm:5,t:13,h:42,p:895},{tm:10,t:21,h:36,p:582},{tm:15,t:22,h:51,p:986},{tm:20,t:21,h:36,p:902},{tm:25,t:22,h:58,p:439},{tm:30,t:16,h:57,p:1042},{tm:35,t:20,h:14,p:480},{tm:40,t:20,h:34,p:958},{tm:45,t:17,h:7,p:403},{tm:50,t:13,h:69,p:460},{tm:55,t:20,h:36,p:967},{tm:60,t:19,h:57,p:419},{tm:65,t:18,h:43,p:746},{tm:70,t:17,h:49,p:344},{tm:75,t:16,h:90,p:651},{tm:80,t:19,h:96,p:646},{tm:85,t:19,h:3,p:301},{tm:90,t:14,h:96,p:770},{tm:95,t:17,h:54,p:1036},{tm:100,t:15,h:79,p:890},{tm:105,t:22,h:32,p:1041},{tm:110,t:22,h:67,p:415},{tm:115,t:20,h:82,p:616}];

var groups = [];

while(weatherData.length) {
    groups.push(weatherData.splice(0, 12));
}

var averageWeather = groups.map(function(g) {
    return Math.round((g.reduce(function(acc, val) { 
       return acc + val.t
    }, 0) / 12) * 100) / 100;
});

console.log(averageWeather);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM