视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
JavaScript趣题:统计降水量
2020-11-27 20:25:15 责编:小采
文档


气象台的工作人员委托你对一组数据进行分析,这里有全球一些城市从一月到十二月份的降水量,每个城市的数据都由"\n"分割开来,每个城市名后面紧跟着一个":"冒号。

如下所示:

	
	var data = "Rome:Jan 81.2,Feb 63.2,Mar 70.3,Apr 55.7,May 53.0,Jun 36.4,Jul 17.5,Aug 27.5,Sep 60.9,Oct 117.7,Nov 111.0,Dec 97.9"
	+ "\n"
	+ "London:Jan 48.0,Feb 38.9,Mar 39.9,Apr 42.2,May 47.3,Jun 52.1,Jul 59.5,Aug 57.2,Sep 55.4,Oct 62.0,Nov 59.0,Dec 52.9"
	+ "\n"
	+ "Paris:Jan 182.3,Feb 120.6,Mar 158.1,Apr 204.9,May 323.1,Jun 300.5,Jul 236.8,Aug 192.9,Sep 66.3,Oct 63.3,Nov 83.2,Dec 154.7"
	+ "\n"
	+ "NY:Jan 108.7,Feb 101.8,Mar 131.9,Apr 93.5,May 98.8,Jun 93.6,Jul 102.2,Aug 131.8,Sep 92.0,Oct 82.3,Nov 107.8,Dec 94.2"
	+ "\n"
	+ "Vancouver:Jan 145.7,Feb 121.4,Mar 102.3,Apr 69.2,May 55.8,Jun 47.1,Jul 31.3,Aug 37.0,Sep 59.6,Oct 116.3,Nov 154.6,Dec 171.5"
	+ "\n"
	+ "Sydney:Jan 103.4,Feb 111.0,Mar 131.3,Apr 129.7,May 123.0,Jun 129.2,Jul 102.8,Aug 80.3,Sep 69.3,Oct 82.6,Nov 81.4,Dec 78.2"
	+ "\n"
	+ "Bangkok:Jan 10.6,Feb 28.2,Mar 30.7,Apr 71.8,May 1.4,Jun 151.7,Jul 158.2,Aug 187.0,Sep 319.9,Oct 230.8,Nov 57.3,Dec 9.4"
	+ "\n"
	+ "Tokyo:Jan 49.9,Feb 71.5,Mar 106.4,Apr 129.2,May 144.0,Jun 176.0,Jul 135.6,Aug 148.5,Sep 216.4,Oct 194.1,Nov 95.6,Dec 54.4"
	+ "\n"
	+ "Beijing:Jan 3.9,Feb 4.7,Mar 8.2,Apr 18.4,May 33.0,Jun 78.1,Jul 224.3,Aug 170.0,Sep 58.4,Oct 18.0,Nov 9.3,Dec 2.7"
	+ "\n"
	+ "Lima:Jan 1.2,Feb 0.9,Mar 0.7,Apr 0.4,May 0.6,Jun 1.8,Jul 4.4,Aug 3.1,Sep 3.3,Oct 1.7,Nov 0.5,Dec 0.7";

现在任务是这样的,你得提供两个函数,一个计算指定城市的各月降水量平均数,另一个计算降水量方差。

函数原型如下:

function mean(town, string)

function variance(town, string)

town参数指代城市名,string则是降水量数据

用法举例如下:

mean("London", data) \\ 51.19(9999999999996) 
variance("London", data) \\ 57.42(833333333374)

思路比较简单:

1.要计算方差必须先算出平均数来

2.要计算平均数,要先根据城市名取出降水量数据

3.要取降水量数据必须先遍历所有数据,找到了再分割字符串

应该注意的问题:

1.有可能找不到指定的城市,它不存在,那么直接返回-1

2.浮点数运算有可能出现精度问题,忽略不计,不必取整或截断

	
	//扩展一个startWith方法
	if (typeof String.prototype.startWith !== "function") {
	String.prototype.startWith = function(str) {
	return this.indexOf(str) === 0;
	};
	}

	//查询指定城市的降水量数据
	function searchData(town, strng) {
	var datas = strng.split("\n");
	var num = datas.length;
	for (var i = 0; i < num; i++) {
	if (datas[i].startWith(town)) {
	return datas[i];
	}
	}
	return null;
	}
	
	//求降水量平均数
	function mean(town, strng) {
	var total = 0;
	var current = searchData(town, strng);
	if (current) {
	var pair = current.split(":");
	if (pair[0] !== town) {
	return -1;
	}
	var allMonths = pair[1].split(",");
	for (var j = 0; j < allMonths.length; j++) {
	var perMonth = allMonths[j];
	total += parseFloat(perMonth.split(" ")[1]);
	}
	return total / 12;
	}
	return -1;
	}
	
	//求方差
	function variance(town, strng) {
	var average = mean(town, strng);
	var total = 0;
	var current = searchData(town, strng);
	if (current) {
	var pair = current.split(":");
	if (pair[0] !== town) {
	return -1;
	}
	var allMonths = pair[1].split(",");
	for (var j = 0; j < allMonths.length; j++) {
	var perMonth = allMonths[j];
	var rainfall = parseFloat(perMonth.split(" ")[1]);
	total += Math.pow(average - rainfall, 2);
	}
	return total / 12;
	}
	return -1;
	}	

下载本文
显示全文
专题