前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >学习JavaScript数据结构与算法(一)

学习JavaScript数据结构与算法(一)

作者头像
zhouzhouya
发布2023-10-26 17:26:34
1860
发布2023-10-26 17:26:34
举报
文章被收录于专栏:一名前端开发

可能很多人工作一段时间,觉得js的知识点掌握的差不多了,应用起来得心应手,但是js的知识高深莫测,所以我打算再系统的学一遍《学习JavaScript数据结构与算法》这本书(主要学习最常用的数据结构和算法),并将学习成果总结如下:

先来点开胃菜

1. js简介

1.1 js基础

1.1.1 数据类型

js的数据类型是我们的常用的10个 基本数据类型(Number,Boolean,String,null,undefined,symbol(ES6新增),BigInt) 引用类型 (Object,Array,Function)

1.1.2 运算符

运算符不难理解,重点注意一下逻辑运算符:&&与(一假则假),||或(一真则真),|非(取反)

短路运算(逻辑中断) 什么是逻辑中断,就是当有多个表达式(值)时,左边表达式的值可以确定结果时,就不再继续运算右边表达式的值了。 (1)逻辑与:表达式1 && 表达式2 如果1真,则返回2,如果1假,则返回1 (2)逻辑或:表达式1 || 表达式2 如果1真,则返回1,如果1假,则返回2

代码语言:javascript
复制
举个栗子:
var num = 0
console.log(123 || num++) //输出123
console.log(num) //输出0

2.ECMAScript和TypeScript概述

ES都很熟悉,不做过多介绍

2.1 ECMAScript介绍

2.1.1模版字面量

模版字面量用一对 ` 包裹。要插入变量的值,只需要把变量放在${}里就可以了,

代码语言:javascript
复制
举个栗子
const person = {
    name:"zhouzhouya"
}
console.log(`我是${person.name}`)

2.1.2箭头函数

代码语言:javascript
复制
举个栗子
const hello = () => console.log("hello")
hello()

2.1.3函数参数的默认值

代码语言:javascript
复制
举个栗子
 function sum(x = 1, y = 2, z = 3) {
    return x + y + z;
  }
 console.log(sum(4, 2)); //输出9

JavaScript函数有个内置的对象,叫做arguments对象。它是一个数组,包含函数被调用时传入的参数。即使不知道参数的名称,我们也可以动态获取并使用这些参数。

2.1.4声明展开和剩余参数

展开运算符...把数组转为参数 在函数中,展开运算符(...)可以代替arguments,当做剩余参数使用

代码语言:javascript
复制
举栗
function sum(x, y, ...a) {
    return (x + y) * a.length;
  }
 console.log(sum(1, 2, "hello", "999", "3")); //输出9

2.1.5增强的对象属性

主要介绍的数组解构,一次初始化多个变量

代码语言:javascript
复制
栗子
let [x,y] = ['a','b']

2.1.6使用类进行面向对象编程

代码语言:javascript
复制
栗子
声明一个有 constructor 函数的类,
class Book {
    constructor(title, pages, isbn) {
      this.title = title;
      this.pages = pages;
      this.isbn = isbn;
    }
    printIsbn() {
      console.log(this.isbn);
    }
  }

2.1.7模块

目前不同的js环境,所采用的模块化方案不同 现代前端开发框架vue,react,angular,采用es6规范

代码语言:javascript
复制
import vue from "vue"
export const data = []
export default function aaa()

nodejs环境采用commonJs规范

代码语言:javascript
复制
1.js
function aaa(){}
modules.export = {aaa}

2.js
const {aaa} = require('./1.js')
aaa()

传统浏览器环境 需要用script标签引入require.js库,然后define函数定义模块,require函数引入模块

2.2TypeScript

TypeScript是一个开源的、渐进式包含类型的JavaScript超集,会被编译成简单的js代码 安装ts

代码语言:javascript
复制
npm install -g typescript

2.2.1类型判断

代码语言:javascript
复制
let age:number = 30
ts允许我们给变量设置一个类型,但是这样写法太繁琐,ts会根据变量赋值自动给变量设置类型。

let age = 20
ts会自动判断age是一个数

声明变量但是没给赋值时建议为其设置一个类型
let name:string

如果没有为变量设置类型,它的类型会自动设置为any,可以接收任何值

2.2.2接口

ts的接口有两种接口的概念: 第一种是给变量设置类型,这种接口把变量看成实际的东西,它是对一个对象必须包含的属性和方法的描述。

代码语言:javascript
复制
interface Person {
    name:string,
    age:number
}

第二种ts接口的概念和面向对象编程有关,可以定义实现类和接口的行为,

代码语言:javascript
复制
interface Comparable{
  comporeTo(b) :number
}
class MyObject implements Comparable {
  age:number;
  comporeTo(b): number {
    if(this.age === b.age) {
      return 0
    }
    return this.age > b.age ? 1 : -1
  } 
}
Comparable接口告诉MyObject类,它需要实现comporeTo,且该方法接收一个参数。在该方法内部,实现想要的逻辑。该接口
的行为在js中不存在,在其他方面很有用处(如开发排序算法)。

3,数组

3.1创建和初始化数组

3.1.1创建数组

使用new关键字,初始化一个数组

代码语言:javascript
复制
let day = new Array()

使用[]初始化数组(常用

代码语言:javascript
复制
let day = []

3.1.2访问元素和迭代数组

看一个栗子,求斐波那契数列的前 20 个数。已知斐波那契数列中的前两项是1, 从第三项开始,每一项都等于前两项之和。如何实现此功能呢? 实现思路:

  1. 声明并创建一个数组
  2. 把斐波那契数列中的前两个数分别赋给数组的第二和第三个位置。 (在 JavaScript 中,数组第一位的索引始终是 0。因为斐波那契数列中不存在 0,所以这里直接略过,从第二位开始分别保存斐波那契数列中对应位置的元素。)
  3. 得到斐波那契数列中3到20的位置上的数,
代码语言:javascript
复制
function fb(n) {
   var res = [1, 1];
   if (n == 1 || n == 2) {
      return 1;
    }
    for (var i = 2; i < n; i++) {
      res[i] = res[i - 1] + res[i - 2];
    }
      return res[n - 1];
   }
   console.log(fb(20)) //输出6765

3.2添加数组

3.2.1在数组末尾插入元素

通过数组自带的push方法就可在数组最后插入元素

3.2.2在数组开头插入元素

通过数组自带的unshift方法就可在数组开头插入元素 另外一种方法

代码语言:javascript
复制
我们希望在数组中插入一个新元素(数-1),不像之前那样插入到最后,而是放到数组的开头。为了实现这个需求,首先要
腾出数组里第一个元素的位置,把所有的元素向右移动一位。我们可以循环数组中的元素,从最后一位(长度值就是数组的末尾位置)
开始,将对应的前一个元素(i-1)的值赋给它(i),依次处理,最后把我们想要的值赋给第一个位置(索引 0)上。我们可以将这
段逻辑写成一个函数,甚至将该方法直接添加在 Array 的原型上,使所有数组的实例都可以访问到该方法。
var numbers = [0,1,2,3,4]
for(let i=numbers.length;i>=0;i--){
   numbers[i] = numbers[i-1]
   console.log('numbers[i]: ', numbers[i]);
}
numbers[0] = value

3.3删除元素

3.3.1从数组末尾删除元素

数组的pop方法

3.3.2从数组开头删除元素

数组的shift方法

3.3.2在任意位置添加或删除元素

通过splice函数

代码语言:javascript
复制
array.splice(index,howmany,item1,.....,itemX)
第一个参数必需。规定从何处添加/删除元素。\
该参数是开始插入和(或)删除的数组元素的下标,必须是数字。
第二个参数可选。规定应该删除多少元素。必须是数字,但可以是 "0"。\
如果未规定此参数,则删除从 index 开始到原数组结尾的所有元素。
第三个参数可选。要添加到数组的新元素

3.4二维和多维数组

3.4.1迭代二维数组

一个二维数组的输出,需要迭代所有的行和列,使用嵌套的for循环处理,i为行,j为列。

代码语言:javascript
复制
function aaa(val) {
  for (let i = 0; i < val.length; i++) {
   for (let j = 0; j < val[i].length; j++) {
       console.log(val[i])
       console.log(val[i][j]);
    }
  }
}
aaa([
 [1, 2, 4, 6],
 [2, 4, 7, 8],
 [8, 9, 10, 11],
 [9, 12, 13, 15],
]);

3.5js数组方法参考

参考文章 juejin.cn/post/712413… 里面的6

代码语言:javascript
复制
由于书上内容较多,分大概4-5篇文章进行总结
如有错误,敬请指正。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. js简介
    • 1.1 js基础
      • 1.1.1 数据类型
      • 1.1.2 运算符
  • 2.ECMAScript和TypeScript概述
    • 2.1 ECMAScript介绍
      • 2.1.1模版字面量
      • 2.1.2箭头函数
      • 2.1.3函数参数的默认值
      • 2.1.4声明展开和剩余参数
      • 2.1.5增强的对象属性
      • 2.1.6使用类进行面向对象编程
      • 2.1.7模块
    • 2.2TypeScript
      • 2.2.1类型判断
      • 2.2.2接口
  • 3,数组
    • 3.1创建和初始化数组
      • 3.1.1创建数组
      • 3.1.2访问元素和迭代数组
    • 3.2添加数组
      • 3.2.1在数组末尾插入元素
      • 3.2.2在数组开头插入元素
    • 3.3删除元素
      • 3.3.1从数组末尾删除元素
      • 3.3.2从数组开头删除元素
      • 3.3.2在任意位置添加或删除元素
    • 3.4二维和多维数组
      • 3.4.1迭代二维数组
    • 3.5js数组方法参考
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档