一、看懂代码的必备知识
1、prompt()接收输入,可以暂停代码,等得到输入以后再执行下面代码。
2、alert()输出字符串,注意是字符串,同样会暂停下面代码,等到用户点击确认之后继续。
3、while循环,先判断后执行,在这里了我们用了死循环。
4、if-else判断语句,条件正确则执行 i f 后的语句,条件不正确则执行 else 后的语句。
5、forEach(function(item){}) 方法,这个方法是遍历数组,item为数组的元素值,在遍历中不能使用 break 终止。
6、some(function(item){return boolean}) 方法,这个方法也会遍历数组,如果在判断条件中有一个元素符合条件就返回 true,注意会返回一个boolean 如数组[1,3,5,4,7,9],在some()中 return item % 2 === 0 , 返回 true,因为4 % 2 === 0,为 true
二、原码以及注释
var books = [] //存储图书的数组
while (true) {
//令判断条件为true,构造一个死循环,让程序一直运行,
//因为咱们有alert()和prompt(),所以不用担心会出现无法控制的后果
var type = +prompt('1-添加,2-借书,3-还书,4-查看图书列表,5-退出')
if (type === 5) {
//5为退出,直接利用break跳出这个死循环
break
} else if (type === 1) {
var bookname = prompt('请输入图书名字')
if (bookname) {
//将图书名字和状态以狭义的对象的形式存入数组中,注意是以对象是以狭义的对象
books.push({
name: bookname,
isOut: false //如果为false则没有借出图书,在此程序中将用isOut表示图书状态
})
}
} else if (type === 4) {
//alert()只能输出字符串,所以需要将books数组中的所有元素转为字符串
var str = ''
books.forEach(function (item) {
//var str = ''
//放在这里是局部变量,在forEach()方法外面输出的话是undefined
str += '书名:' + item.name + ',' +' ' + '存在为true,不存在为false:' +item.isOut + '\n'
})
alert(str)
} else if (type === 2) {
var name = prompt('请输入图书名')
if (books.some(function (item) {
//先判断是否有这个图书
if (name === item.name) {
//再判断图书状态
if (!item.isOut) {
//把这本图书的状态改为true,
item.isOut = true
alert('图书存在,借书成功')
} else {
alert('图书已借出')
}
}
return item.name === name
})) {
// 在此什么都不用做,因为已经在条件的some()函数中,把该做的全做了
//如果不在some()函数中做,那么还要在此处多使用一个forEach()
//下面的还书部分就是没有在some()中做其他操作,而在条件成立后用了forEach()
//供大家比较参考
} else {
alert('此书不存在')
}
} else if (type === 3) {
var name = prompt('请输入图书名')
if (books.some(function (item) { return item.name === name})) {
books.forEach(function (item) {
if (name === item.name) {
if (item.isOut) {
//把这本图书状态改为false
item.isOut = false
alert('还书成功')
} else {
alert('图书未借出')
}
}
})
} else {
alert('此书不存在')
}
}
}
此程序有一个缺点或者说是局限性,就是当添加同名的图书超过一本时将会出现bug,不能很好的完成借书和还书操作。
最后欢迎大家讨论或者批评!
本文含有隐藏内容,请 开通VIP 后查看