第2章习题

数据结构与算法的JS描述

2.9 练习

\1. 创建一个记录学生成绩的对象,提供一个添加成绩的方法,以及一个显示学生平均成绩

的方法。

function Student(){
	this.gradeStore = [];
	this.add = add;
	this.average = average;
}
//添加成绩
function add(grade){
	this.gradeStore.push(grade);
}
//求平均分
function average(){
	var total = 0;
	for(var i=0; i<this.gradeStore.length; i++){
		total += this.gradeStore[i];
	}
	return total/this.gradeStore.length;
}
var stud = new Student();
stud.add(11);
stud.add(33);
stud.add(44);
console.log(stud.average().toFixed(2));

\2. 将一组单词存储在一个数组中,并按正序和倒序分别显示这些单词。

var words = ["domain", "apple", "scope", "abandon", "console"];
print(words.sort());
print(words.reverse());

\3. 修改本章前面出现过的 weeklyTemps 对象,使它可以使用一个二维数组来存储每月的有

用数据。增加一些方法用以显示月平均数、具体某一周平均数和所有周的平均数。

function monthTemps(){
	//初始化月数据,4周,1周7天
	this.monthData = (function weekData(){
		var data = [];
		for(var i =0; i<4; i++){
			var week=[];
			for(var j=0; j<7; j++){
				week[j] = 0;
			}
			data[i] = week;
		}
		return data;
	})();
	
	this.addMonthData = addMonthData;
	this.monthAverage = monthAverage;
	this.weekAverage = weekAverage;
	this.allWeekAverage = allWeekAverage;
}

//添加数据,第几周第几天,添加的数据
function addMonthData(week,day,data){
	this.monthData[week][day] = data;
}

//月平均
function monthAverage(){
	var total = 0;//统计月总数据
	var week = 0;//统计几周
	for(var i=0; i<this.monthData.length; i++){
		for(var j=0; j<this.monthData[i].length; j++)
		total += this.monthData[i][j];
		week++;
	}
	return total/(this.monthData.length*week);
}

//一周平均
function weekAverage(week){
	var total = 0;
	var day = 0;//记录天数
	for(var i=0; i<this.monthData[week].length; i++){
		total += this.monthData[week][i];
		day++;
	}
	return total/day;
}

//所有周平均
function allWeekAverage(){
	var total = 0;
	for(var i=0; i<this.monthData.length; i++){
		for(var j=0; j<this.monthData[i].length; j++){
			total += this.monthData[i][j];
		}
	}
	return total/this.monthData.length;
}

var month_data = new monthTemps();
month_data.addMonthData(0,0,44);
month_data.addMonthData(1,1,14);
month_data.addMonthData(2,2,22);
month_data.addMonthData(3,3,33);
month_data.addMonthData(2,2,55);
month_data.addMonthData(2,6,55);
print("week1: ",month_data.monthData[0]);
print("week2: ",month_data.monthData[1]);
print("week3: ",month_data.monthData[2]);
print("week4: ",month_data.monthData[3]);
print("monthAverage: ",month_data.monthAverage().toFixed(2));
print("week3Average: ",month_data.weekAverage(2).toFixed(2));
print("allWeekAverage: ",month_data.allWeekAverage().toFixed(2));

\4. 创建这样一个对象,它将字母存储在一个数组中,并且用一个方法可以将字母连在一

起,显示成一个单词。

function Str(){
	this.words = ["a", "p", "p", "l","e"];
	this.toStr = toStr;
}
function toStr(){
	return this.words.join('');
}
var obj = new Str();
print(obj.toStr());

第二章总结:

  • split()

  • 浅拷贝 新数组指向原来的数组
    深拷贝 复制原数组中的每一个值到新数组

  • indexOf()返回第一个索引 lastIndexOf()返回最后一个索引

  • 数组的字符串表示
    join() toString()返回字符串,元素默认以逗号隔开

  • 由已有数组创建新数组
    concat()合并
    splice(start,length,插入或删除的项)截取
    splice()length 为0只插入, 大于0删除,返回删除项,有第三个参数会插入数组

  • 为数组添加元素
    push()尾 unshift()首

  • 删除数组元素
    pop() shift()

  • 为数组排序
    reverse()反转
    sort()按字典顺序排序

  • 不产生新数组 数组的迭代器方法

    forEach() every()
    forEach()接收一个函数作为参数,对数组中每个元素执行该操作

    every()该方法接受一个返回值为布尔类型的参数,对数组中每个元素执行函数
    如果所有元素应用该函数均返回true,则every()返回true

    some()同every(),但存在则返回true

    reduce() 接收一个函数,返回一个值,该方法从一个累加值开始,
    不断对累加值和数组中的后续元素调用该函数,直到遇到数组的最后一个元素,返回累加值
    reduceRight()从右向左执行

  • 生成新数组的迭代器方法
    map() filter()
    map()对数组的每一项进行操作,然后返回一的新的数组
    该数组是对原有数组应用某个函数得到的结果,参数为函数名

    filter()传入一个返回值为布尔型的函数,当数组中所有元素应用该函数
    结果均为true时,返回一个新数组,新数组包含所有为true的元素

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值