當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JavaScript数据结构与算法——列表详解(下),基于Nodejs实现一个列表应用
生活随笔
收集整理的這篇文章主要介紹了
JavaScript数据结构与算法——列表详解(下),基于Nodejs实现一个列表应用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、上篇回顧:
上篇我們實現了一個列表類,并添加了一些屬性,實現了比較多的方法,本文章將與大家一起使用列表實現一個圖書借閱查詢系統。需要使用JavaScript數據結構與算法——列表詳解(上)中寫好的列表類List()。
如需查看List()類代碼說明,請查閱本人列表上篇講解,這里只給出List的源碼,以供接下來寫調用:
function List() {this.listSize = 0this.pos = 0this.dataStore = [] // 初始化一個用于保存列表元素的空數組this.clear = clearthis.find = findthis.toString = toStringthis.insert = insertthis.append = appendthis.remove = removethis.front = frontthis.end = endthis.prev = prevthis.next = nextthis.hasNext = hasNextthis.hasPrev = hasPrevthis.length = lengththis.currPos = currPosthis.moveTo = moveTothis.getElement = getElementthis.contains = contains}function append(element) {this.dataStore[this.listSize++] = element}function find(element) {for (var i = 0; i < this.dataStore.length; i++) {if (this.dataStore[i] == element) {return i}}return -1}function remove(element) {var foundAt = this.find(element)if (foundAt > -1) {this.dataStore.splice(foundAt, 1)this.listSize--return true}return false}function length() {return this.listSize}function toString() {return this.dataStore.toString()}function insert(element, after) {var insertPos = this.find(after)if (insertPos > -1) {this.dataStore.splice(insertPos + 1, 0, element)this.liseSize++return true}return false}function clear() {delete this.dataStorethis.dataStore.length = 0this.listSize = 0this.pos = 0}function contains(element) {for (var i = 0; i < this.dataStore.length; i++) {return true}return false}// 遍歷列表function front() {this.pos = 0}function end() {this.pos = this.listSize - 1}function prev() {this.pos--}function next() {if (this.pos < this.listSize) {this.pos++}}function currPos() {return this.pos}function moveTo(position) {this.pos = position}function hasNext() {return this.pos < this.listSize}function hasPrev() {return this.pos >= 0}function getElement() {return this.dataStore[this.pos]}2、基于Nodejs使用列表實現一個圖書借閱查詢系統
新建一個List文件夾,里邊包含一個book.txt(用于存放書本),一個book.js,用于編寫js(請先載入上篇中實現的List()相關代碼)。
2.1 讀取書本文件
// Created by xiaoqiang on 05/04/2018. var fs = require('fs') function readBooks('book.txt') {var data = fs.readFileSync(file)var dataArray = data.toString().split('\n')for (var i = 0; i < dataArray.length; i++) {dataArray[i] = dataArray[i].trim()}return dataArray }編寫的過程可以在函數外添加console.log(readBooks('book.txt')),便于測試,進入當前文件夾,使用命令node book.js,看到以下結果證明node環境沒問題&&函數編寫沒問題:
2.2 保存書本到列表
開頭我們說過,上篇中我們寫好了一個List()類,接下來我們通過此類創建一個書本列表對象,并往列表對象中的dataStore屬性添加元素。
function saveBooksToList(file) {var booksArray = readBooks(file)for (var i = 0; i < booksArray.length; i++) {bookList.append(booksArray[i])} }2.3 展示列表信息
function displayList(list) {for (list.front(); list.currPos() < list.length(); list.next()) {console.log(list.getElement())} }測試:
var bookList = new List()saveBooksToList('book.txt')displayList(bookList)運行結果:
2.4 創建借閱人方法
此方法用于保存哪個人借閱了哪些書。
// 借閱人信息 function borrower(name, book) {this.name = namehis.book = book }2.5 實現借書方法
// 借書 function borrowBook(name, book, bookList, borrowerList) {if (bookList.contains(book)) {var b = new borrower(name, book)borrowerList.append(b)bookList.remove(book)console.log(name + '借閱書本' + book + '成功!!!')} else {console.log('書本已經被借走!!!')} }解釋:四個參數意義分別為:借閱人名稱,要借的書本,書本列表,借閱人列表;首先檢查書本是否存在,存在的話將書本及借閱人信息保存到借閱人列表,信息如果不存在提示錯誤信息。
2.6 最終結果測試
// 書本列表對象var bookList = new List()// 借閱人列表對象var borrowerList = new List()// 保存書本到列表saveBooksToList('book.txt')console.log('------------當前可借的書-------------------')// 顯示書本信息displayList(bookList)console.log('-----------------開始借書------------------')// 借書borrowBook('xgq', 'Nodejs詳解', bookList, borrowerList)console.log('-----------------借閱信息------------------')// 顯示借閱人列表displayList(borrowerList)console.log('-----------------剩余可借的書---------------') // 借閱后剩余的書本列表displayList(bookList)結果:
2.7 book.js完整代碼(整合上篇):
// Created by xiaoqiang on 05/04/2018.var fs = require('fs')var readline = require('readline') // JavaScript數據結構與算法——列表詳解(上)function List() {this.listSize = 0this.pos = 0this.dataStore = [] // 初始化一個用于保存列表元素的空數組this.clear = clearthis.find = findthis.toString = toStringthis.insert = insertthis.append = appendthis.remove = removethis.front = frontthis.end = endthis.prev = prevthis.next = nextthis.hasNext = hasNextthis.hasPrev = hasPrevthis.length = lengththis.currPos = currPosthis.moveTo = moveTothis.getElement = getElementthis.contains = contains}function append(element) {this.dataStore[this.listSize++] = element}function find(element) {for (var i = 0; i < this.dataStore.length; i++) {if (this.dataStore[i] == element) {return i}}return -1}function remove(element) {var foundAt = this.find(element)if (foundAt > -1) {this.dataStore.splice(foundAt, 1)this.listSize--return true}return false}function length() {return this.listSize}function toString() {return this.dataStore.toString()}function insert(element, after) {var insertPos = this.find(after)if (insertPos > -1) {this.dataStore.splice(insertPos + 1, 0, element)this.liseSize++return true}return false}function clear() {delete this.dataStorethis.dataStore.length = 0this.listSize = 0this.pos = 0}function contains(element) {for (var i = 0; i < this.dataStore.length; i++) {return true}return false}// 遍歷列表方法function front() {this.pos = 0}function end() {this.pos = this.listSize - 1}function prev() {this.pos--}function next() {if (this.pos < this.listSize) {this.pos++}}function currPos() {return this.pos}function moveTo(position) {this.pos = position}function hasNext() {return this.pos < this.listSize}function hasPrev() {return this.pos >= 0}function getElement() {return this.dataStore[this.pos]}// 讀取書本文件function readBooks(file) {var data = fs.readFileSync(file)var dataArray = data.toString().split('\n')for (var i = 0; i < dataArray.length; i++) {dataArray[i] = dataArray[i].trim()}return dataArray } // 保存書本到列表 function saveBooksToList(file) {var booksArray = readBooks(file)for (var i = 0; i < booksArray.length; i++) {bookList.append(booksArray[i])} } // 展示列表信息 function displayList(list) {for (list.front(); list.currPos() < list.length(); list.next()) {console.log(list.getElement())} }// 借閱人信息 function borrower(name, book) {this.name = namethis.book = book }// 借書 function borrowBook(name, book, bookList, borrowerList) {if (bookList.contains(book)) {var b = new borrower(name, book)borrowerList.append(b)bookList.remove(book)console.log(name + '借閱書本' + book + '成功!!!')} else {console.log('書本已經被借走!!!')} } // 測試// 書本列表對象var bookList = new List()// 借閱人列表對象var borrowerList = new List()// 保存書本到列表saveBooksToList('book.txt')console.log('------------當前可借的書-------------------')// 顯示書本信息displayList(bookList)console.log('-----------------開始借書------------------')// 借書borrowBook('xgq', 'Nodejs詳解', bookList, borrowerList)console.log('-----------------借閱信息------------------')// 顯示借閱人列表displayList(borrowerList)console.log('-----------------剩余可借的書---------------') // 借閱后剩余的書本列表displayList(bookList)有錯誤歡迎指出,謝謝。
完結~~
總結
以上是生活随笔為你收集整理的JavaScript数据结构与算法——列表详解(下),基于Nodejs实现一个列表应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自由交的概率配子法
- 下一篇: JavaScript数据结构与算法——栈