1,2,3基础知识,数组,列表

发布于 2022年 01月 18日 17:41

1.1 JavaScript环境

本小节讲述对JS的环境安装和使用

1.2 JavaScript 编程实践

本小节展示了js基础语法:定义、循环、判断、作用域等

1.3 对象和面向编程对象

以一个对象的代码为例介绍了js进行对象和面向对象编程

function account(amount) {
    this.balance = amount
    this.deposit = deposit
    this.toString = toString
    this.withdraw = withdraw
}
function deposit(deposit) {
    this.balance += deposit
}

function toString() {
    return `balance: ${this.balance}`
}

function withdraw(number) {
    if(this.balance > number) {
        this.balance -= number
    } else {
        retrun `余额不足`
    }
}
# 列表

# 列表的抽象定义
+ listSize(属性): 列表元素的个数
+ pos(属性): 列表当前的位置
 
+ length(属性): 返回列表中元素的个数
+ clear(方法) :清空list
+ toString(方法): 返回字符串形式
+ getElement(方法): 返回当前的位置
+ insert(方法): 在现有的元素前插入
+ append(方法): 在现有的元素后插入
+ remove(方法): 删除列表的元素
+ front(方法): 将列表的当前位置移动到第一个元素
+ end(方法): 将列表的当前位置移动到最后一个元素
+ next(方法): 将当前元素移动到后一位
+ prev(方法): 将当前元素移动到前一位
+ hasNext(方法): 判断下一位
+ hasPrev(方法): 判断前一位
+ moveTo(方法): 将当前位置移动到指定位置
+ currPos(方法): 返回列表的当前位置

function List() { this.pos = 0 this.dataStore = [] } List.prototype = { length: function() { return this.dataStore.length; }, clear: function() { this.dataStore = [] }, toString: function() { return this.dataStore }, getElement: function() { return this.dataStore[this.pos] }, find: function(element) { for (let i = 0; i < this.dataStore.length; i++) { if(element == this.dataStore[i]) { return i } return -1 } }, insert: function(element, target) { let targetIndex = this.dataStore.indexOf(target) if(targetIndex > -1) { this.dataStore.splice(targetIndex, 0, element) } else { return false } }, append: function(element) { this.dataStore.push(element) }, remove: function(element) { let index = this.dataStore.indexOf(element) if(index > -1) { this.dataStore.splice(index,1) } else { return false } }, front: function() { this.pos = 0 }, end: function() { this.pos = this.dataStore.length -1 }, next: function() { if(this.pos < this.dataStore.length -1) { this.pos ++ } }, prev: function() { --this.pos }, hasNext: function() {

    },
    hasPrev: function() {},
    moveTo: function(position) {
        this.pos = position
    },
    contain: function(element) {
        for (let index = 0; index < this.dataStore.length; index++) {
            var item = this.dataStore[index];
            if(item == element) {
                return true
            }
        }
        return false
    }
}
let names = new List()
names.append('Sacit')
names.append('Leblonc')
names.append('Sett')

2.1 数组

标准定义: 一个存储元素的线性集合,元素可以通过索引来任意取值

在JavaScript中这些索引都被转化成了字符串类型,因为Javascrpit的属性名必须是字符串类型

Javascript的数组严格意义上来说就是一个对象,也因为Array被视为对象,在使用中可以直接在编程里使用他的属性和方法

2.2 使用数组

2.2.1 创建数组

var numbers = []
// numbers.length

var numners = new Array()
var numners = new Array(1,2,3,4,5)
var numners = new Array(10) // 只有一个参数时表示为数组的长度

Array.isArray 判断是否为数组类型

2.2.2 数组读写

numbers[0] 读取
numbers[1] = 'array' 写入

2.2.3 由字符串生成数组

str.split()

2.2.4 对数组的整体性操作

浅拷贝

被赋值的数组创建了新的引用
var numbers = [0,1,2,3]
var same = numbers
numbers[0] = 9
same[0]的值也是9

2.3 存取函数

2.3.1 查找

arr. indexof

2.3.2 数组的字符串表示

arr. join toString

2.3.3 拼接

arr .concat()

2.4 可变函数

  • push 插尾
  • unshift 插头
  • pop 删尾
  • shift 删头
  • splice('起始索引', 删除个数, 想要添加进来的数组)
  • sort reverse 排序

2.5 迭代器

  • foreach
  • every
  • reduce
  • map
  • filter

2.6 二维数组和多维数组

2.6.1 创建二位数组

一维数组的每一项都是数组

var twod = []
var rows = 5
for(var i = 0; i< rows; i++) {
    two[i] = []
}

Array.matrix = function(rows, columns, initial) {
    var arr = []
    for(var i = 0; i< rows; i++) {
        arr[i] = []
        for(var j = 0; j < columns, j++) {
            arr[i][j] = initial
        }
    }
    return arr
}

2.6.2 处理二位数组

var nums = [[10,20,30], [100,200,300], [1,2,3]]
var total 
nums.forEach(item => {
    item.forEach(i => {
        console.log(i)
        total += i
    })
    console.log(total/ item.length, total, item.length)
    total = 0
})

2.6.3 参差不齐的数组

var grades = [[88,90],[90,95,88],[90,91,91,92]]
var total = 0
for(var i = 0; i< grades.length; i++) {
    var col = grades[i]
    for(var j = 0; j< col.length; j++) {
        total += col[j]
    }
    console.log(total, total/ col.length)
    total = 0
}

2.7 对象数组

练习代码

function account(amount) {
        this.balance = amount
        this.deposit = deposit
        this.toString = toString
        this.withdraw = withdraw
    }

    function deposit(deposit) {
        this.balance += deposit
    }

    function toString() {
        return `balance: ${this.balance}`
    }

    function withdraw(number) {
        if (this.balance > number) {
            this.balance -= number
        } else {
            return `余额不足`
        }
    }

    let myaccount = new account(1000)
    // myaccount.deposit(500)
    // myaccount.toString()
    // myaccount.withdraw(800)
    // myaccount.toString()
    // myaccount.withdraw(1000)
    // myaccount.toString()

    // function grades(arr) {
    //     this.grades = arr
    //     this.add = addgrades
    //     this.getAverage = getAverage
    // }
    // function addgrades(grades) {
    //     this.grades.push(grades)
    // }
    // function getAverage() {
    //     var total = 0
    //     this.grades.forEach(element => {
    //         total += element
    //     });
    //     return total / this.grades.length
    // }
    // let eg = new grades([10,20])
    // eg.add(20)

    // 'hello'.split('').reverse().join('')

    function List() {
        this.pos = 0
        this.dataStore = []
    }
    List.prototype = {
        length: function() {
            return this.dataStore.length;
        },
        clear: function() {
            this.dataStore = []
        },
        toString: function() {
            return this.dataStore
        },
        getElement: function() {
            return this.dataStore[this.pos] 
        },
        find: function(element) {
            for (let i = 0; i < this.dataStore.length; i++) {
                if(element == this.dataStore[i]) {
                    return i
                }
                return -1
            }
        },
        insert: function(element, target) {
            let targetIndex = this.dataStore.indexOf(target)
            if(targetIndex > -1) {
                this.dataStore.splice(targetIndex, 0, element)
            } else {
                return false
            }
        },
        append: function(element) {
            this.dataStore.push(element)
        },
        remove: function(element) {
            let index = this.dataStore.indexOf(element)
            if(index > -1) {
                this.dataStore.splice(index,1)
            } else {
                return false
            }
        },
        front: function() {
            this.pos = 0
        },
        end: function() {
            this.pos = this.dataStore.length -1
        },
        next: function() {
            if(this.pos < this.dataStore.length -1) {
                this.pos ++
            }
        },
        prev: function() {
            --this.pos
        },
        hasNext: function() {

        },
        hasPrev: function() {},
        moveTo: function(position) {
            this.pos = position
        },
        contain: function(element) {
            for (let index = 0; index < this.dataStore.length; index++) {
                var item = this.dataStore[index];
                if(item == element) {
                    return true
                }
            }
            return false
        }
    }
    let names = new List()
    names.append('Sacit')
    names.append('Leblonc')
    names.append('Sett')    

推荐文章