首页 > 编程语言 >JavaScript 算法和数据结构之——基础JavaScript 笔记

JavaScript 算法和数据结构之——基础JavaScript 笔记

时间:2023-07-02 22:23:47浏览次数:63  
标签:function const 函数 JavaScript 算法 数组 字符串 return 数据结构

做整理是为了知识更加系统一些,遂记录
参考资料

js基础算法

JavaScript 字符串

可以用单引号或双引号

查找字符串长度

.length

空格符也会计算在内

使用方括号查找字符串中的第一个字符

方括号表示法(Bracket notation)是一种在字符串中的特定 index(索引)处获取字符的方法

xxx[0]获取字符串第一个字符

字符串的不变性

字符串要变整个改掉,不能用xxx[0]这样改

方括号查找字符串中的第 N 个字符

xxx[N-1]即可

方括号查找字符串中的最后一个字符

xxx[xxx.length-1]

方括号查找字符串中的倒数第 N 个字符

xxx[xxx.length-N]

填词

字符串变量:myNounmyAdjectivemyVerbmyAdverb

字符串 const wordBlanks = "The"+" "+myAdjective+" "+myNoun+" "+myVerb+" "+myAdverb;

数组

js数组将多个值存储在一个变量中

const myArray = ["hi",3];

将一个数组嵌套在另一个数组中

const teams = [["Bulls", 23], ["White Sox", 45]];

也叫做多维数组(multi-dimensional array)

通过索引访问数组中的数据

和字符串时一样

通过索引修改数组中的数据

const myArray = [18, 64, 99];

myArray[0] = 45;

修改索引0的值

使用索引访问多维数组

可以把多维数组看作成是数组中的数组

使用括号访问数组时,第一组括号指的是最外层(第一层)数组中的条目

通过每一对额外的括号指向里面下一层的条目

const arr = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9],
  [[10, 11, 12], 13, 14]
];

const subarray = arr[3];
const nestedSubarray = arr[3][0];
const element = arr[3][0][1];

注意:数组和方括号之间不允许加空格

使用 push 方法操作数组---数据添加到数组末尾

一个将数据添加到数组末尾的简单方法是 push() 函数

.push() 接受一个或多个参数(parameters),并把它压入到数组的末尾

const arr1 = [1, 2, 3];
arr1.push(4);

const arr2 = ["Stimpson", "J", "cat"];
arr2.push(["happy", "joy"]);

运行后arr1 值为 [1, 2, 3, 4]arr2 值为 ["Stimpson", "J", "cat", ["happy", "joy"]]

使用 pop 方法操作数组---弹出数组末尾的值并返回这个元素

.pop() 函数用来弹出一个数组末尾的值

可以把这个弹出的值赋给一个变量存储起来

换句话说就是 .pop() 函数移除数组末尾的元素并返回这个元素

数组中任何类型的元素(数值,字符串,甚至是数组)都可以被弹出来

使用 shift 方法操作数组---移除数组首项的值并返回这个元素

.shift() ,它的工作原理就像 .pop(),但它移除的是第一个元素

const ourArray = ["Stimpson", "J", ["cat"]];
const removedFromOurArray = ourArray.shift();//注意需要定义变量

removedFromOurArray 值为 StimpsonourArray 值为 ["J", ["cat"]]

使用 unshift 方法操作数组---在数组的头部添加元素

不仅可以移出,也可以 unshift(移入)一个元素到数组的头部

const ourArray = ["Stimpson", "J", "cat"];
ourArray.shift();
ourArray.unshift("Happy");

shiftourArray 值为 ["J", "cat"]。 在 unshiftourArray 值为 ["Happy", "J", "cat"]

购物清单---创建多位数组

创建多维数组,方法很多:

const myList = [["Chocolate Bar",15],["qingcai",3],["caihua",4],["guobaorou",10],["zhajitui",5]];
const myList = [];
myList.push(["Chocolate Bar",15]);
myList.push(["qingcai",3]);
myList.push(["caihua",4]);
myList.push(["guobaorou",10]);
myList.push(["zhajitui",5]);

函数

用函数编写可复用代码

可以把代码的重复部分抽取出来,放到一个函数 (functions)中

function functionName() {
  console.log("Hello World");
}

每次调用functionName时,都会运行大括号内的内容

将值传递给带有参数的函数

函数的参数 (parameters)在函数调用中充当传入函数的输入占位符(也叫形参)

function testFun(param1, param2) {
  console.log(param1, param2);
}

调用函数的时候如果没有输入两个参数则会输出NaN

使用 return 给函数返回值

我们可以通过函数的参数(arguments)把值传入函数, 也可以使用 return 语句把数据从一个函数中传出来

function plusThree(num) {
  return num + 3;
}

const answer = plusThree(5);

全局作用域和函数

作用域涉及到变量的作用范围

在函数外定义的变量具有 全局 作用域

也就是具有全局作用域的变量可以在代码的任何地方被调用

未使用 letconst 关键字声明的变量会在 global 范围内自动创建

当在代码其他地方无意间定义了一个变量,刚好变量名与全局变量相同,这时会产生意想不到的后果

你应该总是用 letconst 声明你的变量

const myGlobal=10;

function fun1() {
  oopsGlobal=5;
}
fun1();

function fun2() {
  let output = "";
  if (typeof myGlobal != "undefined") {
    output += "myGlobal: " + myGlobal;
  }
  if (typeof oopsGlobal != "undefined") {
    output += " oopsGlobal: " + oopsGlobal;
  }
  console.log(output);
};
fun2()

输出myGlobal: 10 oopsGlobal: 5

局部作用域和函数

在一个函数内声明的变量,以及该函数的参数都具有局部(local)作用域

也就是它们只在该函数内可见

function myTest() {
  const loc = "foo";
  console.log(loc);
}

myTest();
console.log(loc);

外面的console.log就会抛出错误

函数中的全局作用域和局部作用域---局部变量优先级更高

一个程序中有可能具有相同名称的局部变量 和全局变量

在这种情况下,局部变量将会优先于全局变量

const someVar = "Hat";

function myFun() {
  const someVar = "Head";
  return someVar;
}

函数 myFun 将会返回字符串 Head

函数也可以返回 undefined---没有return时

函数一般用 return 语句来返回值,但这不是必须的

在函数没有 return 语句的情况下,当你调用它时,该函数会执行内部代码,返回的值是 undefined

let sum = 0;

function addSum(num) {
  sum = sum + num;
}

addSum(3);

返回值为undefined

使用返回值赋值---在return时计算

可以获取函数的返回值,并将其赋值给一个变量

let processed = 0;

function processArg(num) {
  return (num + 3) / 5;
}

processed=processArg(7)

队列---新条目进旧条目出

把数字添加到数组的结尾,然后移出数组的第一个元素

function nextInLine(arr, item) {
  arr.push(item);
  return item=arr.shift();
}

// 设置
let testArr = [1, 2, 3, 4, 5];

// 显示代码
console.log("Before: " + JSON.stringify(testArr));
console.log(nextInLine(testArr, 6));
console.log("After: " + JSON.stringify(testArr));

理解布尔值

数据类型布尔(Boolean)

布尔值只能是两个值中的一个:true 或者 false

注意: 布尔值是不带引号的。 字符串 "true""false" 不是布尔值,在 JavaScript 中也没有特殊含义。

用 if 语句来表达条件逻辑

关键字 if 告诉 JavaScript 在小括号中的条件为真的情况下去执行定义在大括号里面的代码

这种条件被称为 Boolean 条件,因为他们只可能是 true(真)或 false(假)

//伪代码
if(条件为真){
语句被执行
}
function trueOrFalse(wasThatTrue) {
  if(wasThatTrue){
    return "Yes, that was true"
  }
  return "No, that was false"
}

如果参数 wasThatTrue 值为 true,返回 Yes, that was true,否则,返回No, that was false

标签:function,const,函数,JavaScript,算法,数组,字符串,return,数据结构
From: https://www.cnblogs.com/goicandoit/p/17521541.html

相关文章

  • 文心一言 VS 讯飞星火 VS chatgpt (53)-- 算法导论6.2 5题
    五、MAX-HEAPIFY的代码效率较高,但第10行中的递归调用可能例外,它可能使某些编译器产生低效的代码。请用循环控制结构取代递归,重写MAX-HEAPIFY代码。文心一言:以下是使用循环控制结构取代递归调用的MAX-HEAPIFY代码:defmax_heapify(A,i):heap_size=len(A)le......
  • RSA算法
    1.前言RSA加密是工作中非常常见的加密算法之一,我们今天来详细看看它的加密流程以及代码。2.非对称算法我们知道AES是对称算法,RSA是非对称算法。那么为什么会有对称以及非对称算法呢,非对称算法是不是比对称算法要安全呢?对称加密,顾名思义,加密方与解密方使用同一钥匙(秘钥)。......
  • C++ 数据结构
    C++数据结构C/C++数组允许定义可存储相同类型数据项的变量,但是结构是C++中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性:Title:标题Author:作者Subject:类目......
  • 开心档之C++ 数据结构
    C++数据结构C/C++数组允许定义可存储相同类型数据项的变量,但是结构是C++中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据项。结构用于表示一条记录,假设您想要跟踪图书馆中书本的动态,您可能需要跟踪每本书的下列属性:Title:标题Author:作者Subject:类目Bo......
  • Redis数据结构——链表
    前言Redis链表为双向无环链表!Redis使用了简单动态字符串,链表、字典(散列表)、跳跃表、整数集合、压缩列表这些数据结构来操作内存。本文继续来分析链表。 链表是一种非常常见的数据结构,在Redis中使用非常广泛,列表对象的底层实现之一就是链表。其它如慢查询,发布订阅,监视器等功......
  • Redis数据结构——字典
    前言字典在Redis中的应用非常广泛,数据库与哈希对象的底层实现就是字典。一、复习散列表1.1散列表散列表(哈希表),其思想主要是基于数组支持按照下标随机访问数据时间复杂度为O(1)的特性。可以说是数组的一种扩展。假设,我们为了方便记录某高校数学专业的所有学生的信息。要求可......
  • 【学习笔记】Bostan-Mori 算法
    其实是用于常系数齐次线性递推,只不过本篇博文只讲解如何求分式的高次项系数。已知多项式\(f(x),g(x)\),要求:\([x^k]\dfrac{f(x)}{g(x)}\),其中\(f(x),g(x)\)的次数为\(n,m\),\(n,m\le10^5,k\le10^9\)。算法流程如下:分式上下同乘\(g(-x)\),也就是\(g\)的奇次项都取反的多项......
  • Redis数据结构——简单动态字符串SDS
    前言相信用过Redis的人都知道,Redis提供了一个逻辑上的对象系统构建了一个键值对数据库以供客户端用户使用。这个对象系统包括字符串对象、哈希对象、列表对象、集合对象、有序集合对象等。但是Redis面向内存并没有直接使用这些对象。而是使用了简单动态字符串,链表、字典(散列表)、......
  • redirect-django-url-with-javascript
    https://www.appsloveworld.com/django/100/279/redirect-django-url-with-javascriptscore:3AcceptedanswerYoucanusethis:window.location.href="{%url'app:result'%}" score:1djangotemplatetagsworkinsidethedjangotem......
  • 算法——二分查找
    1、在有序数组中查找元素的第一个和最后一个位置1classSolution{2publicint[]searchRange(int[]nums,inttarget){3intleftindex=binarySearch(nums,target);4intrightindex=binarySearch(nums,target+1)-1;5if(leftindex=......