js 双for循环嵌套,找到arr2 中 group 和 id 与 arr1 中属性值都相同的数据, 添加到新数组

let arr1 = [{group: 1, id: 2, name: "aa"}, {group: 2, id: 1, name: "bb"}, {group: 2, id: 2, name: "cc"}, {group: 3, id: 2, name: "dd"}];
let arr2 = [{group: 1, id: 1, name: "ee"}, {group: 2, id: 2, name: "ff"}, {group: 3, id: 3, name: "gg"}, {group: 4, id: 2, name: "hh"}];
let arr3 = [];
for (let i = 0; i < arr1.length; i++) {
    let pre = arr1[i];
    for (let j = 0; j < arr2.length; j++) {
        let old = arr2[j];
        if (pre.group == old.group && pre.id == old.id) {
            arr3.push(old);
console.log(arr3);
js 双for循环嵌套,找到arr2 中 group 和 id 与 arr1 中属性值都相同的数据, 添加到新数组let arr1 = [{group: 1, id: 2, name: "aa"}, {group: 2, id: 1, name: "bb"}, {group: 2, id: 2, name: "cc"}, {group: 3, id: 2, name: "dd"}];let arr2 = [{group: 1, id: 1, name: "ee"}, {group: 2, id: 2
第一种:for循环,也是最常见的 const arr = [11, 22, 33, 44, 55, 66, 77, 88]; for (let i = 0; i < arr.length; i++) { console.log(arr[i]); 打印结果: 第二种:forEach() 1.)forEach() 遍历普通 数组 const arr = [11, 22, 33, 44, 55, 66, 77, 88]; arr.forEach(item => {
今天项目有一个需求是判断 两个 数组 a,b是否相等来确定内容有没有进行过修改,如果 数组 不一样就是修改过要进行提示,然后我下意识用===来判断,报错后才意识到 数组 是引用 数据 类型,不是基本 数据 类型,所以不能根据 来判断,对象的比较均是引用的比较,他们是不同引用对象有着不同的内存空间。所以我们不能用===来判断,可以用以下方法判断。 方法一: 数组 转化为字符串,然后用===或者==判断 var a=[1,2,3]; var b=[1,2,3]; console.log(a.toString()==...
使用 重for循环判断重复 数据 for(let i=0;i<this.dataList.length;i++){ for(let j=i+1;j<this.dataList.length;j++){ if(this.dataList[i].name===this.dataList[j].name){ this.$message(‘名字重复了!') 说明: 两个 数组 ,寻找 相同 项,并将b 数组 添加 至a 数组 let a=[{"id": 1,"name": "小米"},{"id": 2,"name": "喜哦"},{"id": 3,"name": "莉莉"}]; let b=[{"id": 1,"name": "小米"},{"id": 2,"name": "喜哦"},{"id": 1,"name": "131313"},{"id": 5,"name": "13131"}]; let m = ne
JS 的发展史: 1、1992年 Nombas 开发了一款语言 ScriptEase 2、1995年 Netscape(网景) 开发了一款语言 LiveScript,更名为 Javascript 3、1996年 Microsoft(微软) 开发了一款语言 JS cript 4、1997年 网景 将 Javascript 1.1 提供给了ECMA(欧洲计算机制造商联合会),ECMA 获取了 JS 的核心,称之为 ECMA Script (ES) 完整的 JS 组成: 1、核心(ES) 2、文档对象模型(Document Object Model) - DOM 允许让 JS 与 HTML 文档打交道 3、浏览器对象模型(Browser Object Model) - BOM 允许让 JS 与 浏览器进行交互 JS 是一款基于对象的编程语言 2、 JS 的基础语法 1、浏览器内核 内核负责页面内容的渲染,由以下两部分组成: 1、内容排版引擎 - 解析HTML/CSS 2、脚本解释引擎 - 解析 Javascript 2、搭建 JS 运行环境(重点) 1、独立安装的 JS 解释器 - Node JS console.log("Hello World"); console.log('Hello World'); 2、使用浏览器中的内核( JS 解释引擎) 1、在浏览器的控制台(Console)中,输入脚本并执行 2、将 JS 脚本代码嵌入在HTML页面中执行 1、采用HTML元素事件执行 JS 代码 1、onclick 当元素被点击时执行的操作 ex: 当按钮被点击时,在控制台中输出 Hello World 2、将 JS 脚本编写在 [removed][removed] 并嵌入在HTML文档的任何位置 [removed] console.log("... ..."); [removed]("Hello Wolrd"); [removed] 3、将 JS 脚本编写在外部独立的 JS 脚本文件中(***. js ) 1、编写 JS 脚本文件 2、在HTML中引入脚本文件 [removed][removed] 1、先创建一个 base. js 的文件 2、在文件中执行以下代码 console.log(" .... ... "); [removed](" ... ... "); window.alert("这是在外部脚本文件中的内容"); 3、在 html 文档中,引入 base. js 文件 3、 JS 调试 当代码编写出现错误时,在运行的时候,在错误位置会停止 碰到错误代码,会终止当前语句块的执行,但不影响后续块的执行 [removed][removed] 为一块 4、 JS 语法 1、语句 - 可以被 JS 引擎执行的最小单元 由表达式、关键字、运算符 来组成的 严格区分大小写 :name 和 Name 所有的语句都是以 ; 来表示结束 所有的标点符号都是英文的 ; 和 ; . 和 。 : 和 : " 和 “ ' 和 ‘ () 和 () [] 和 【】 {} 和 {} 单行注释: // 多行注释: /* */ 3、变量 与 常量 1、什么是变量 用来存储 数据 的一个容器 2、声明变量(重点) 1、声明变量 var 变量名; 2、为变量赋 变量名= ; 3、声明变量并赋初始 var 变量名= ; 1、变量在声明时没有赋 的话,那么 为 undefined 2、声明变量允许不使用var关键字,但并不推荐 1、创建一个网页 04-variable.html 2、声明一对 [removed][removed],并完成以下变量的声明 1、声明一个变量用于保存用户的姓名,并赋 为 "张三丰"; 2、声明一个变量用于保存用户的年龄,赋 68 3、如何 将变量的 数据 打印在控制台上?? 4、一条语句中声明多个变量 var 变量名1= ,变量名2= ,变量名3; 3、变量名命名规范 1、由字母,数字,下划线以及 $ 组成 var user_name; 正确 var user-name; 错误 var $uname; 正确 2、不能以数字开头 var 1name;错误 3、不能使用 JS 中的关键字 和 保留关键字 4、变量名不能重复 5、可以采用"驼峰命名法",小驼峰命名法使用居多 6、最好见名知意 var a; var uname; 4、变量的使用 1、为变量赋 - SET操作 只要变量出现在 赋 符号(=)的左边一律是赋 操作 var uname="张三丰"; uname="张无忌"; 2、获取变量的 - GET操作 只要变量没有出现在赋 符号(=)的左边,一律是取 操作 var uname="wenhua.li";//赋 操作 console.log(uname); var new_name = uname; new_name 是赋 操作 uname 是取 操作 uname = uname + "bingbing.fan"; 赋 符号出现的话,永远都是将右边的 ,赋 给左边的变量(从右向左运算) 1、什么是常量 在程序中,一旦声明好,就不允许被修改的 数据 2、声明常量 const 常量名= ; 常量名在命名时采用全大写形式 1、声明一个变量 r ,来表示一个圆的半径,并赋 2、声明一个常量PI ,来表示圆周率3.14 3、通过 r 和 PI 来计算 该圆的周长,保存在变量l中 周长 = 2 * π * 半径 4、通过 r 和 PI 来计算 该圆的面积,保存在变量s中 面积 = π * r * r; 5、在控制台中打印输出 半径为 * 的圆的周长是 * 半径为 * 的圆的面积是 * 语法:a ^ b 特点:将 a 和 b 先转换为二进制,按位操作,对应位置上的 两个 数字, 相同 时,该位整体结果为0,不同时,该位的整体结果为 1 使用场合:快速交换 两个 数字 5 ^ 3 ========== 110 结果为 6 var a = 5; var b = 3; a = a ^ b; b = b ^ a; a = a ^ b; console.log(a,b); 3、赋 和 扩展赋 运算符 1、赋 运算符 := 2、扩展赋 运算符 +=,-=,*=,/=,^=,... ... a += b; ==> a = a + b; a = a + 1; ==> a += 1; ==> a++ ; ==> ++a 1、从弹框中,分两次输入 两个 数字,分别保存在 a 和 b中 2、如果 a 大于 b的话 ,则交换 两个 数字的位置 使用 短路&&,扩展赋 运算符,位运算 4、条件运算符(三目运算) 单目(一元)运算符 :++,--,! 目(二元)运算符 :+,-,*,/,%,>,= 18 ? "你已成年" : "你未成年"; 从弹框中录入一个数字表示考试成绩(score) 如果 成绩为 100 分 ,提示 :满分 如果 成绩 >= 90 分 ,提示 :优 如果 成绩 >= 80 分 ,提示 :良 如果 成绩 >= 60 分 ,提示 :及格 否则 :提示 不及格 1、什么是函数 函数(function),是一段预定义好,并且可以被反复使用的代码块 预定义好 :事先声明,但不是马上执行 反复使用 :可以被多次调用 代码块 :包含多条可执行的语句 2、函数的声明与调用 1、普通函数 function 函数名(){ 调用:在 JS 中任何的合法位置处,都可以通过 函数名() 的方式进行调用 1、声明一个函数,名称为 change 2、在函数中 1、通过弹框,分两次,录入 两个 数字,保存在 a 和 b 2、先打印 a 和 b的 3、如果 a > b 的话,则交换 两个 数字的位置 4、再打印 a 和 b的 3、在网页中,创建一个按钮,点击按钮时,完成 change 函数的调用 2、带参函数 1、定义语法: function 函数名(参数列表){ 参数列表: 可以由0或多个参数的名称来组成,多个参数的话中间用 , 隔开 定义函数时的参数列表,都称为 "形参(形式参数)" 2、调用语法 任意合法 JS 位置处 函数名(参数列表); 调用函数时,所传递的参数列表,称之为"实参(实际参数)" 1、定义一个函数 change ,该函数中接收 两个 参数(a,b) 2、在函数体中,如果 a 大于 b的话,则交换 两个 数字的位置,再打印输出结果 3、通过一个按钮调用函数,并且将 两个 数字传递给函数 4、常用带参函数 parseInt(变量); parseFloat(变量); Number(变量) console.log(""); 3、带返回 的函数 var result = parseInt("35.5"); 1、什么是返回 由函数体内 带到 函数体外的 数据 ,叫做"返回 " function 函数名(参数列表){ return ; 允许通过一个变量来接收调用函数后的返回 var 变量名 = 函数名(实参列表); 定义一个可以接收三个Number参数的方法(名称为getMax),在该方法中,计算并返回 最大的数 3、作用域 1、什么事作用域 指的是变量和函数的可访问范围,作用域分为以下两类 1、函数作用域 只在定义的函数内允许访问变量 和 函数 2、全局作用域 一经定义,在任何位置处都能访问 2、函数作用域中的变量 在某个函数中声明的变量,就是函数作用域中的变量,也可以称之为 "局部变量"。 function calSum(){ var a = 3; var b = 5; console.log(a,b); // 输出 3 5 console.log(a,b); //错误,因为 a ,b已经出了它的定义范围 1、定义一个 函数calSum,声明 两个 变量a,b,并赋 ,并且在函数内打印 两个 变量 2、定义一个 函数calMax,直接打印输出 a,b,观察结果 3、全局作用域中的变量 一经声明了,任何位置都能使用。也称为 "全局变量" 声明方式: 1、将变量声明在最外层,所有的function之外 [removed] var a = 15; var b = 18; function showMsg(){ console.log(a); console.log(b); [removed] 2、声明变量时,不使用var关键字,一律是全局变量,但有风险 全局变量 ,尽量都声明在 所有的 function 之外 声明变量时,也一律都使用 var 关键字 4、声明提前 function show(){ console.log(num);//报错 1、什么是声明提前 JS 程序在正式执行前,会将所有var声明的变量以及function声明的函数,预读到所在作用域的顶端。但赋 还保留在原位置上 最好将变量的声明 和 函数的声明都集中到所在作用域的最顶端 5、按 传递 function change(a,b){ a ^= b; b ^= a; a ^= b; console.log("在change函数中"); console.log(a,b); function testChange(){ var a = 15; var b = 18; console.log("调用前:"); console.log(a,b);//15 18 change(a,b); console.log("调用后:"); console.log(a,b);//15 18 1、什么是按 传递 基本 数据 类型的数字在做参数传递时,实际上时传递的实参的副本到函数中,原始 数据 并未发生过改变 基本 数据 类型的 数据 在做参数传递时,尽量不要在函数中修改,因为即便修改,也不会影响原 数据 的 6、局部函数 将函数 再声明在某个函数内,就是局部函数 [removed] function show(){ function inner(){ console.log("show 中的 inner 函数"); inner();//正确 inner(); // 错误,inner 是局部函数,只能在 show中被调用 [removed] 7、全局函数 ECMAScript预定义的全局函数,可供用户直接使用 1、paseInt(); 2、parseFloat(); 3、Number(); 4、isNaN(); 5、encodeURI() URL:Uniform Resource Locator :统一资源定位符/器 URI:Uniform Resource Identifier : 统一资源标识符 对统一资源标识符格式的字符串进行编码,并返回编码后的字符串 编码:将多字节的字符,编译成多个单字节的字符 6、decodeURI() 对已编码的URI进行解码(将已编码内容再转换回中文) 7、encodeURIComponent() 在 encodeURI 基础之上,允许将 特殊符号(:,/,...) 进行编码 8、decodeURIComponent() 9、eval() 作用:计算并执行以字符串方式表示的 JS 代码 var msg = "console.log('Hello World');"; eval(msg);//将 msg 作为 JS 代码去执行 1、创建页面,通过弹框,输入一段 JS 代码 2、通过 eval() ,将输入的 JS 代码执行一次 3、递归调用 1、什么是递归 递归指的是在一个函数中,又一次的调用了自己 2、递归的实现 1、边界条件 2、递归前进 - 继续调自己 3、递归返回 - 向上返回 数据 3、解决问题 1、计算某个数字的阶乘 5!=5*4*3*2*1 5! = 5 * 4! 4! = 4 * 3! 3! = 3 * 2! 2! = 2 * 1! 1! = 1 /*计算 n 的阶乘*/ function f(n){ ... ... 已知下列数列 (菲波那切数列) 1,1,2,3,5,8,13,21,34,55,... ... 已知 第一个数为1,第二个数为1 从第三个数开始,每个数字等于前 两个 数之和 问题:通过一个函数,求某个位置上的数字(用递归实现) 1、使用 continue ,打印输出 1-100之间所有偶数的和 2、让用户循环从弹框录入信息,并将信息打印在控制台上,直到用户输入 exit 为止 输入 数据 :sanfeng.zhang sanfeng.zhang 输入 数据 :wuji.zhang wuji.zhang 输入 数据 :exit 3、猜数字游戏 1、随机生成一个 1-100 之间的数字 Math.random() 返回 0-1 之间的小数 var r = parseInt(Math.random()*100)+1; 2、要求用户输入一个整数 若比生成的随机数大,则输出 “猜大了” 若比生成的随机数小,则输出 “猜小了” 直到用户 猜对为止 3、如果用户输入exit ,也可以退出游戏 用户从弹框中输入年,月,日,判断该日是星期几? 1900年1月1日 是星期1 推荐思路: 从1900年1月1日 到 输入的年月日 共有多少天求出来,与 7 取余 1、通过一个循环计算从1900年 到输入年前一年有多少天? 2、再从1月,到输入月份的前一个月共有多少天? 3、再累加 输入的日 4、用整体结果 与7取余,给出提示 附加作业: 将 输入的月份的日历打印输出 2017年8月 日 一 二 三 四 五 六 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 4、有一对兔子,从出生后的第3个月起都生一对兔子,小兔子长到第3个月后每个月又生一对兔子,假如兔子都不死的话,打印输出 前10个月,每个月有多少对兔子 n1 n2 n1 n2 n1 n2 1 , 1 , 2 , 3 , 5 , 8 , 13 , 21 , 34 , 55 2、三个表达式的特殊用法 1、for(;;) 三个表达式可以任意的省略,不推荐省略 2、for 第一个 和 第三个表达式的多样化 for(var i=1,j=2;i=1;i++,j--){ console.log(i+"+"+j+"="+(i+j)); 3、嵌套循环 在一个循环的内部又出现一个循环 for(var i=0;i<10;i++){ // 外层循环 for(var j=0;j<10;j++){ // 内层循环 外层循环执行一次,内层循环要执行一轮 1、控制台中输出下面的图形 ****** ****** ****** ****** ****** ***** ***** ******* ********* 2、 数组 1、什么是 数组 数组 ,即一组 数据 ,使用一个变量来存放多个 数据 数组中 的元素是按照"线性"书序来排列的,所以也可以称之为是一个 "线性表" 2、声明 数组 1、声明一个空 数组 变量 var 数组 名 = []; 2、声明 数组 并赋初始 var 数组 名 = [ 数据 1, 数据 2, 数据 3,... ...]; 3、声明一个空 数组 变量 var 数组 名 = new Array(); 4、声明一个 数组 并赋初始 var 数组 名 = new Array( 数据 1, 数据 2,... ...); 1、创建一个函数,分别用两种不同的方式创建 数组 (arr1,arr2) arr1保存 :张三丰,张翠山,张无忌 arr2保存 :金花婆婆,殷素素,赵敏 2、直接将 数组 打印在控制台上 3、 数组 是引用类型的对象 引用类型的对象,是将 数据 保存在 "堆" 中的 在"栈"中,会对 "堆" 中 数据 的地址进行引用 1、将 数组 给其它变量时,实际赋的是 数组 的地址 1、创建一个 数组 arr1 ,包含"张无忌","赵敏" 2、将 arr1 赋 给 arr2 3、将 arr2 的第一个元素更改为 "金花婆婆",打印输出 arr1 和 arr2 中的所有元素 2、 数组 在做参数的时候,传递进去的实际上是地址(按引用传递 即 按地址传递) 1、创建一个 数组 array,保存"张无忌","赵敏"俩元素 2、创建一个函数change,接收一个 数组 作为参数,在函数体内,将第一个元素更改为"金花婆婆" 3、调用change函数,并将array 数组 作为参数,调用完成后,打印array的 ,观察结果 4、修改change函数,在函数体内,将传递进来的 数组 new一个Array("孙悟空","猪八戒") 5、重复步骤三,观察结果 3、null 表示的是让引用类型的对象不再指向任何空间.一般用于主动释放对象的空间 //让 array 指向 数组 的地址 var array = ["wuji.zhang","zhaomin"]; //释放 array空间,不再指向任何地址 array = null; 4、访问 数组 的元素 赋 ,取 ,都是使用 下标 来完成的 1、为 数组 的元素赋 数组 名[下标] = ; var array = ["张无忌","赵敏"]; array[1] = "周芷若"; array[2] = "小昭";//增加一个 元素,在第3个位置处 array[5] = "灭绝师太"; 2、获取 数组中 数组 名[下标]; 3、length 属性 作用:获取 数组 的长度( 数组中 元素的个数) 1、允许将 数组 的length 属性 设置为0,来完成 数组 元素的清空操作 2、配合循环 做 数组 的循环遍历操作 var array = ["张无忌","赵敏"]; 第1名 :张无忌 第2名 :赵敏 for(var i=0;i"sanfeng.zhang"]; 用字符串做下标,就是关联 数组 var array = []; //声明一个空 数组 array["西游记"] = "古代神话故事"; array["红楼梦"] = ["贾宝玉","林黛玉","刘姥姥"]; Q : array.length 1、关联 数组 是不算做 数组 内容的,不记录到 length 中 2、关联 数组 只能通过 字符串 做下标取 3、允许通过 for...in 来循环遍历关联 数组 的字符串下标(也能遍历出内容的数字下标) 3、冒泡排序 [23,9,78,6,45] -> [6,9,23,45,78] 冒泡排序:车轮战,两两比较,小的靠前 1、轮数 :共比较了 length - 1 轮 2、每轮中比较的次数 :随着轮数的增加,次数反而减少 层循环表示整个排序的过程 1、外层循环 :控制比较的轮数,从1开始,到length-1(能取到)结束 2、内层循环 :控制每轮中比较的次数,并且也要表示参与比较的元素的下标,从0开始,到 length-1-i(轮数变量) [23,9,78,6,45] 共5个元素 外层:从 1 开始,到 4 结束 第一轮 第一次:从 0 开始 ,到 3 结束 第二轮 第一次:从 0 开始 ,到 2 结束 ... ... 2、 数组 的常用方法 1、toString() 将一个 数组 转换为字符串 语法:var str = 数组 对象.toString(); 2、join() 作用:将 数组中 的元素通过指定的分隔符连接到一起,并返回连接后的字符串 语法:var str = 数组 对象.join("&"); 练习:(10分钟) 1、使用 数组 实现由 * 组成的三角形 直角三角形,等腰三角形 ***** 2、使用 数组 实现 九九乘法表 3、连接 数组 函数:concat() 作用:拼接 两个 或更多的 数组 ,并返回拼接后的结果 语法:var result=arr1.concat(arr2,arr3,arr4); 1、concat不会改变现有 数组 ,而是返回拼接后的 2、每个参数不一定非是 数组 ,也可以是普通的 数据 1、声明 两个 全局 数组 ,分别保存一些国家的名称 数组 1:选中的国家 sel = ["中国","美国","俄罗斯","日本"]; 数组 2:备选国家 unsel=["朝鲜","越南","老挝","柬埔寨"]; 2、将 备选国家 全部移入到 入选国家中,打印 数据 sel = ["中国","美国","俄罗斯","日本","朝鲜","越南","老挝","柬埔寨"]; unsel=[]; 4、获取子 数组 函数:slice() 作用:从指定 数组中 ,截取几个连续的元素组成的 数组 语法:arr.slice(start,[end]); start:从哪个下标处开始截取,取 为正,从前向后取,取 为负,从后向前算位置。 0 1 2 3 var arr=["中国","美国","日本","英国"]; -4 -3 -2 -1 end : 指定结束处的下标(不包含),该参数可以省略,如果省略的话,就是从start一直截取到结束 1、该函数不会影响现有 数组 ,会返回全 数组 var arr=["中国","美国","日本","英国"]; 取出 美国 和 日本 组成的一个子 数组 5、修改 数组 函数:splice() 作用:允许从指定 数组中 ,删除一部分元素,同时再 添加 另一部分元素 arr.splice(start,count,e1,e2,... ...); start:指定 添加 或删除元素的起始位置/下标 count:要删除的元素个数,取 为0表示不删除 e1,e2,... ... : 要增加的 元素,允许多个 返回 :返回一个由删除元素所组成的 数组 注意:splice 会改变现有 数组 在 sel 和 unsel 的基础上完成下列操作 1、从备选国家中(unsel),选择一个国家移入到 选中的国家(sel) 推荐步骤: 1、用户输入 :越南 从 unsel 中将越南移除 再将 越南 sel 的末尾处 2、用户输入 :墨西哥 提示:国家不存在 6、 数组 的反转 作用:颠倒 数组中 元素的顺序 语法:arr.reverse(); 注意:该函数会改变当前 数组 的内容 1、声明一个整数 数组 2、倒序打印输出内容(使用reverse()) 7、 数组 排序 函数:sort(); 语法:arr.sort(排序函数); 作用:默认情况下,按照元素的Unicode码大小按升序排列 特殊:允许自己指定排序函数,从而实现对数字的升序和降序的排列 语法:arr.sort(排序函数); var arr = [12,6,4,72,115,89]; //排序函数(升序) function sortAsc(a,b){ return a-b; arr.sort(sortAsc); 1、指定排序函数 如 sortAsc,定义 两个 参数,如 a 和 b。 数组 会自动传递 数据 到 sortAsc 里面去,如果返回 是>0的数,则交换 两个 数的位置,否则不变 使用匿名函数完成排序: arr.sort(function(a,b){return a-b;}); 1、声明一个整数 数组 ,随意定义数字 2、页面上 添加 两个 按钮,一个"升序"按钮,一个"降序"按钮 3、点击 升序 按钮时, 数组 按升序排序,并打印 4、点击 降序 按钮时, 数组 按降序排序,并打印 8、进出栈操作 JS 是按照标准的"栈式操作"访问 数组 的 所有的"栈式操作"的特点都是"后进先出" "栈式操作"讲究的"入栈"和"出栈" 1、push() 入栈,在栈顶( 数组 的尾部) 添加 指定的元素,并返回 数组 的长度 var arr = [10,20,30]; //向栈顶增加 数据 40 var len = arr.push(40); //len 保存的是 40 入栈后 arr 的长度, 是4 2、pop() 出栈,删除并返回栈顶的( 数组 尾部)元素 var arr = [10,20,30]; var r1 = arr.pop();//arr = [10,20] var r2 = arr.pop();//arr = [10] ============================== arr : r1 : 30 r2 : 20 3、shift() 删除 数组 头部的(第一个)元素并返回 var arr = [10,20,30]; var r1 = arr.shift(); ============================ arr : [20,30] r1 : 10 4、unshift() 作用:在 数组 的头部(第一个)元素位置处,增加 元素 var arr = [10,20,30]; arr.unshift(40); arr : [40,10,20,30] 3、二维 数组 1、什么是二维 数组 一个 数组中 的元素又是一个 数组 ,也可以称之为: 数组 数组 2、创建二维 数组 var names=[ ["孙悟空","猪八戒","沙悟净"], ["潘金莲","西门庆","武大郎"], ["贾宝玉","刘姥姥","林黛玉"], ["貂蝉","貂蝉","貂蝉"] //获取猪八戒 console.log(names[0][1]); //获取林黛玉 console.log(names[2][2]); 1、通过 进出栈 操作,完成 十进制对二进制的转换 1、创建一个函数 decode2bin,接收一个十进制的数字做参数 2、函数体中,将参数 拆成二进制数字,保存在一个 数组中 3、将 数组 的元素使用""连接,并返回 十进制 转 二进制 :除2取余法 num : 5 num % 2 : 结果为 1 num = parseInt(num / 2) : 结果 2 num % 2 : 结果为 0 num = parseInt(num / 2) : 结果 1 num % 2 : 结果为 1 num = parseInt(num / 2) : 结果 0 结果为 0 时则不用再继续 %2 2、根据省份信息,查询城市列表 1、创建一个全局 数组 ,保存几个省份名称 2、创建一个全局二维 数组 ,保存不同省份中的城市信息( 数据 要与省份 数组中 数据 对应的上) 3、创建一个函数,接收一个省份名称做参数,打印该省份中对应的所有的城市信息
JavaScript 电子书,包括了 JavaScript 的大部分知识,可以帮助读者快速入门。内容如下: 第1章 JavaScript 语言概述 1.1 JavaScript 是什么 1.1.1 JavaScript 简史 1.1.2 JavaScript 有何特点 1.2 JavaScript 能做什么 1.2.1 表单 数据 合法性验证 1.2.2 页面特效 1.2.3 交互式菜单 1.2.4 动态页面 1.2.5 数 计算 1.3 JavaScript 编程起步 1.3.1 “Hello World!”程序 1.3.2 选择 JavaScript 脚本编辑器 1.4 如何引入 JavaScript 脚本代码 1.4.1 通过与标记对引入 1.4.2 通过标记的src 属性 引入 1.4.3 通过 JavaScript 伪URL引入 1.4.4 通过HTML文档事件处理程序引入 1.5 嵌入 JavaScript 脚本代码的位置 1.5.1 在与标记对之间放置 1.5.2 在与标记对之间放置 1.5.3 在 两个 标记对之间混合放置 1.6 选择合适的浏览器 1.7 处理不支持 JavaScript 脚本的情况 1.7.1 使用标记对直接屏蔽法 1.7.2 使用和标记对给出提示信息 1.8 JavaScript 的实现基础 1.8.1 ECMAScript 1.8.2 DOM 1.8.3 BOM 1.9 客户端与服务器端脚本 1.10 JavaScript JS cript、 VBScript 1.11 JavaScript 与Java、Java applet 1.12 JavaScript 的未来如何 1.13 本章小结 第2章 JavaScript 语言入门 2.1 编程准备 2.1.1 编程术语 2.1.2 脚本执行顺序 2.1.3 大小写敏感 2.1.4 空白字符 2.1.5 分号 2.1.6 块 2.2 数 类型 2.2.1 整型和浮点数 2.2.2 八进制和十六进制 2.3 变量 2.3.1 变量标识符 2.3.2 变量申明 2.3.3 变量作用域 2.4 弱类型 2.5 基本 数据 类型 2.5.1 Number型 2.5.2 String型 2.5.3 Boolean型 2.5.4 Undefined型 2.5.5 Null型 2.5.6 Function型 2.6 组合类型 2.6.1 Array型 2.6.2 Object型 2.7 运算符 2.7.1 赋 运算符 2.7.2 基本数学运算符 2.7.3 位运算符 2.7.4 位移运算符 2.7.5 自加和自减 2.7.6 比较运算符 2.7.7 逻辑运算符 2.7.8 逗号运算符 2.7.9 空运算符 2.7.10 ?...:运算符 2.7.11 对象运算符 2.7.12 typeof运算符 2.7.13 运算符优先级 2.8 核心语句 2.8.1 基本处理流程 2.8.2 if条件假设语句 2.8.3 switch流程控制语句 2.8.4 for循环语句 2.8.5 while和do-while循环语句 2.8.6 使用break和continue进行循坏控制 2.8.7 with对象操作语句 2.8.8 使用for…in进行对象循坏 2.8.9 含标签的语句 2.9 函数 2.9.1 函数的基本组成 2.9.2 全局函数与局部函数 2.9.3 作为对象的函数 2.9.4 函数递归调用 2.9.5 语言注释语句 2.9.6 函数应用注意事项 2.10 本章小结 第3章 JavaScript 事件处理 3.1 什么是事件 3.2 HTML文档事件 3.2.1 事件捆绑 3.2.2 浏览器事件 3.2.3 HTML元素事件 3.2.4 IE扩展的事件 3.3 JavaScript 如何处理事件 3.3.1 匿名函数 3.3.2 显式声明 3.3.3 手工触发 3.4 事件处理器的返回 3.5 事件处理器设置的灵活性 3.6 现代事件模型与Event对象 3.7 IE4中的Event对象 3.7.1 对象 属性 3.7.2 事件上溯 3.7.3 阻止事件上溯 3.7.4 事件改向 3.8 NN4中的Event对象 3.8.1 对象 属性 3.8.2 事件捕获 3.8.3 关闭事件捕获 3.8.4 事件传递 3.9 DOM的解决之道 1.4.1 通过[removed]与[removed]标记对引入 1.4.2 通过[removed]标记的src 属性 引入 1.4.3 通过 JavaScript 伪URL引入 1.4.4 通过HTML文档事件处理程序引入 1.5 嵌入 JavaScript 脚本代码的位置 1.5.1 在<head>与</head>标记对之间放置 1.5.2 在<body>与</body>标记对之间放置 1.5.3 在 两个 标记对之间混合放置 1.6 选择合适的浏览器 1.7 处理不支持 JavaScript 脚本的情况 1.7.1 使用<!--和-->标记对直接屏蔽法 1.7.2 使用<noscript>和</noscript>标记对给出提示信息 1.8 JavaScript 的实现基础 1.8.1 ECMAScript 1.8.2 DOM 1.8.3 BOM 1.9 客户端与服务器端脚本 1.10 JavaScript JS cript、 VBScript 1.11 JavaScript 与Java、Java applet 1.12 JavaScript 的未来如何 1.13 本章小结 第2章 JavaScript 语言入门 2.1 编程准备 2.1.1 编程术语 2.1.2 脚本执行顺序 2.1.3 大小写敏感 2.1.4 空白字符 2.1.5 分号 2.1.6 块 2.2 数 类型 2.2.1 整型和浮点数 2.2.2 八进制和十六进制 2.3 变量 2.3.1 变量标识符 2.3.2 变量申明 2.3.3 变量作用域 2.4 弱类型 2.5 基本 数据 类型 2.5.1 Number型 2.5.2 String型 2.5.3 Boolean型 2.5.4 Undefined型 2.5.5 Null型 2.5.6 Function型 2.6 组合类型 2.6.1 Array型 2.6.2 Object型 2.7 运算符 2.7.1 赋 运算符 2.7.2 基本数学运算符 2.7.3 位运算符 2.7.4 位移运算符 2.7.5 自加和自减 2.7.6 比较运算符 2.7.7 逻辑运算符 2.7.8 逗号运算符 2.7.9 空运算符 2.7.10 ?...:运算符 2.7.11 对象运算符 2.7.12 typeof运算符 2.7.13 运算符优先级 2.8 核心语句 2.8.1 基本处理流程 2.8.2 if条件假设语句 2.8.3 switch流程控制语句 2.8.4 for循环语句 2.8.5 while和do-while循环语句 2.8.6 使用break和continue进行循坏控制 2.8.7 with对象操作语句 2.8.8 使用for…in进行对象循坏 2.8.9 含标签的语句 2.9 函数 2.9.1 函数的基本组成 2.9.2 全局函数与局部函数 2.9.3 作为对象的函数 2.9.4 函数递归调用 2.9.5 语言注释语句 2.9.6 函数应用注意事项 2.10 本章小结 第3章 JavaScript 事件处理 3.1 什么是事件 3.2 HTML文档事件 3.2.1 事件捆绑 3.2.2 浏览器事件 3.2.3 HTML元素事件 3.2.4 IE扩展的事件 3.3 JavaScript 如何处理事件 3.3.1 匿名函数 3.3.2 显式声明 3.3.3 手工触发 3.4 事件处理器的返回 3.5 事件处理器设置的灵活性 3.6 现代事件模型与Event对象 3.7 IE4中的Event对象 3.7.1 对象 属性 3.7.2 事件上溯 3.7.3 阻止事件上溯 3.7.4 事件改向 3.8 NN4中的Event对象 3.8.1 对象 属性 3.8.2 事件捕获 3.8.3 关闭事件捕获 3.8.4 事件传递 3.9 DOM的解决之道 3.9.1 事件流方向 3.9.2 Event对象 3.9.3 事件类型 3.10 本章小结 第4章 JavaScript 基于对象编程 4.1 面向对象编程与基于对象编程 4.1.1 什么是对象 4.1.2 面向对象编程 4.1.3 面向对象编程:继承 4.1.4 面向对象编程:封装 4.1.5 面向对象编程:多态 4.1.6 基于对象编程 4.2 JavaScript 对象的生成 4.2.1 HTML文档结构 4.2.2 DOM框架 4.2.3 顶级对象之间的关系 4.2.4 浏览器载入文档时对象的生成 4.3 JavaScript 核心对象 4.4 文档对象的引用 4.4.1 通过对象位置访问文档对象 4.4.2 通过name 属性 访问文档对象 4.4.3 通过id 属性 访问文档对象 4.4.4 通过联合 数组 访问文档对象 4.5 创建和使用自定义对象 4.5.1 通过定义对象的构造函数的方法 4.5.2 通过对象直接初始化的方法 4.5.3 修改、删除对象实例的 属性 4.5.4 通过原型为对象 添加 属性 方法 4.5.5 自定义对象的嵌套 4.5.6 内存的分配和释放 4.6 本章小结 第5章 文档对象模型(DOM) 5.1 DOM概述 5.1.1 基本对象模型 5.1.2 Netscape Navigator浏览器扩展 5.1.3 Internet Explorer浏览器扩展 5.1.4 Opera、Mozilla和其他浏览器扩展 5.1.5 W3C DOM 5.1.6 W3C DOM规范级别 5.2 文档对象模型的层次 5.3 文档对象的产生过程 5.4 对象的 属性 和方法 5.4.1 何谓节点 5.4.2 元素节点(element node) 5.4.3 文本节点(text node) 5.4.4 属性 节点(attribute node) 5.4.5 对象 属性 5.4.6 id 属性 和class 属性 5.4.7 通过id 属性 返回指定对象 5.4.8 通过元素标签返回指定对象 5.4.9 通过name 属性 返回指定对象 5.4.10 获取特定 属性 的取 5.4.11 设置特定 属性 的取 5.4.12 删除特定的 属性 5.5 附加的节点处理方法 5.5.1 生成节点 5.5.2 插入和 添加 节点 5.5.3 复制节点 5.5.4 删除和替换节点 5.5.5 文本节点操作 5.6 对象的事件处理程序 5.7 浏览器兼容性策略 5.8 本章小结 第6章 String、Math、Array等 数据 对象 6.1 String对象 6.1.1 如何使用String对象方法操作字符串 6.1.2 获取目标字符串长度 6.1.3 连接 两个 字符串 6.1.4 验证电子邮件地址的合法性 6.1.5 返回指定位置的字符串 6.1.6 在URL中定位字符串 6.1.7 分隔字符串 6.1.8 将字符串标记为HTML语句 6.1.9 常见 属性 和方法汇总 6.2 Math对象 6.2.1 基本数学运算 6.2.2 任意范围随机数发生器 6.2.3 访问其基本 属性 6.2.4 使用with声明简化表达式 6.2.5 常见 属性 汇总 6.2.6 常见方法汇总 6.3 Array对象 6.3.1 创建 数组 并访问其特定位置元素 6.3.2 数组中 元素的顺序问题 6.3.3 模拟堆栈和队列操作的方法 6.3.4 使用splice()方法 添加 和删除 数组 元素 6.3.5 修改length 属性 更改 数组 6.3.6 调用Array对象的方法生成字符串 6.3.7 连接 两个 数组 6.3.8 常见 属性 和方法汇总 6.4 Date对象 6.4.1 生成日期对象的实例 6.4.2 如何提取日期各字段 6.4.3 如何设置日期各字段 6.4.4 将日期转化为字符串 6.5 Number对象 6.5.1 创建Number对象的实例 6.5.2 将Number对象转化为字符串 6.5.3 通过原型 属性 为对象 添加 属性 和方法 6.5.4 常见 属性 和方法汇总 6.6 Boolean对象 6.6.1 创建Boolean对象的实例 6.6.2 将Boolean对象转化为字符串 6.6.3 常见 属性 和方法汇总 6.7 Function对象 6.7.1 两个 概念:Function与function 6.7.2 使用Function对象构造函数 6.7.3 常见 属性 和方法汇总 6.8 Object对象 6.8.1 创建Object对象的实例 6.8.2 常见 属性 和方法列表 6.9 本章小结 第7章 Window及相关顶级对象 7.1 顶级对象模型参考 7.2 Window对象 7.2.1 警告框 7.2.2 确认框 7.2.3 提示框 7.2.4 实例:学生信息采集系统 7.2.5 设定时间间隔 7.2.6 事件超时控制 7.2.7 创建和管理 窗口 7.2.8 常见 属性 和方法汇总 7.3 Navigator对象 7.3.1 获取浏览器信息 7.3.2 常见方法和 属性 汇总 7.4 Screen对象 7.4.1 获取客户端屏幕信息 7.4.2 定位窗口到指定位置 7.4.3 常见 属性 和方法汇总 7.5 History对象 7.5.1 使用back()和forward()方法进行站点导航 7.5.2 使用go()方法进行站点导航 7.5.3 常见 属性 和方法汇总 7.6 Location对象 7.6.1 统一资源定位器(URL) 7.6.2 Location对象 属性 与URL的对应 7.6.3 使用reload()方法重载页面 7.7 Frame对象 7.7.1 框架集文档中对象的结构 7.7.2 控制指定的框架 7.7.3 常见 属性 和方法汇总 7.7.4 Frameset对象 7.7.5 iframe元素对象 7.8 Document对象 7.9 本章小结 第8章 Document对象 8.1 对象模型参考 8.2 Document对象 8.2.1 获取目标文档信息 8.2.2 设置文档颜色 8.2.3 往文档写入 内容 8.2.4 常见 属性 和方法汇总 8.3 body元素对象 8.3.1 获取body元素对象信息 8.3.2 常见 属性 和方法汇总 8.4 本章小结
单选框 radio&lt;div class="radio-inline"&gt; &lt;input type="radio" name="killOrder" value="1"/&gt; &lt;label for="killOrder1"&gt;是&lt;/label&gt; &lt;/div&gt; return true; if (typeof obj1 !== 'object' || obj1 == null || typeof obj2 !== 'object' || obj2 == null) { return false; const keys1 = Object.keys(obj1); const keys2 = Object.keys(obj2); if (keys1.length !== keys2.length) { return false; for (let key of keys1) { if (!keys2.includes(key) || !isEqual(obj1[key], obj2[key])) { return false; return true; 使用方式如下: let obj1 = {a: 1, b: "hello", c:{d: 2}}; let obj2 = {a: 1, b: "hello", c:{d: 2}}; console.log(isEqual(obj1, obj2)); // true 2. 多次循环的方式: 代码如下: function isEqual(obj1, obj2) { if (obj1 === obj2) { return true; if (typeof obj1 !== 'object' || obj1 == null || typeof obj2 !== 'object' || obj2 == null) { return false; const keys1 = Object.keys(obj1); const keys2 = Object.keys(obj2); if (keys1.length !== keys2.length) { return false; for (let i = 0; i < keys1.length; i++) { let key = keys1[i]; if (keys2[i] !== key || !isEqual(obj1[key], obj2[key])) { return false; return true; 使用方式与上面 相同 。 注意事项: 如果 两个 对象中包含 数组 ,则需要使用递归的方法进行比较,不能简单地使用 == 或 === 进行比较。同时,如果 两个 对象中包含函数,则函数所在的 属性 会被忽略。