js遍历对象、遍历数组、js数组方法大全、区分map()和forEach()以及filter()、区分for...in...和for...of...

1、给对象添加属性:使用 object.prop 或object['prop']  给对象添加属性

 let obj={};obj.name="zhangsan";obj["age"]=23;obj["class"]="语文";console.log(obj);   //输出:{name: "zhangsan", age: 23, class: "语文"}

2、删除对象属性:使用 delete 删除对象属性

let obj={name:"xiaohua",age:22};
delete obj.name;
delete obj["age"];
console.log(obj);  //输出:{}

  注意::在循环中删除对象属性时候会报错!!!待补充

3、对象合并:使用jquery的  $.extend(obj01,obj02)合并多个对象

let obj01={'a':1,'b':2};
let obj02={'c':3,'d':4,'e':5};
$.extend(obj01,obj02);
console.log(obj01); //输出:{a: 1, b: 2, c: 3, d: 4, e: 5} ,被合并到第一个参数obj01对象中
console.log(obj02); //输出:{c: 3, d: 4, e: 5} ,未改变obj02let obj03=$.extend({},obj01,obj02);  //不会改变obj1,obj2
console.log(obj03);   //输出:{a: 1, b: 2, c: 3, d: 4, e: 5}

4、对象合并:使用 Object.assign(o1,o2) 方法

let o1={a:'a',b:'b'};
let o2={c:'c',d:'d'};
let o3=Object.assign(o1,o2);
console.log(o3);  //输出:{a: "a", b: "b", c: "c", d: "d"}
console.log(o1);  //输出:{a: "a", b: "b", c: "c", d: "d"} ,合并后第一个对象也会改变
console.log(o2);  //输出:{c: "c", d: "d"},合并后未改变

5、遍历对象键、属性值:使用 for(变量 in 对象) 的形式遍历对象属性名

let obj001={name:'tom',age:26};
for(let key in obj001){console.log(key+":"+obj001[key]); //输出:name:tom和age:26 ,key就是属性名(键)
}
console.log(Object.keys(obj001));  //Object.keys(o1)方法数组形式返回o1对象的所有属性名(键)
//Object.keys(obj001)方法获取的是对象实例属性组成的数组,不包括原型方法和属性!!!!

注意:for...in...遍历的是数组或对象的索引值index,而for...of...遍历的是数组的元素值;

 

6、遍历数组:使用 for(变量 in 数组) 的形式遍历数组

let arr01=[12,22,32,42];
let arr02=new Array(12,22,32,42);  //使用Array构造函数创建数组
let arr03=new Array(5);  //创建一个包含5项的数组
for(let index in arr01){  //index是数组下标,for..in..遍历所有索引项console.log(index+":"+arr01[index]);  //输出:0:12 1:22 2:32 3:42
}

注意:for...in...更适合遍历对象,for...of...更适合遍历数组值

for in 遍历数组会存在一些问题,如下:

Array.prototype.method=function(){  //原型方法console.log(this.length);
}
var myArray=[1,2,4,5,6,7]
myArray.name="数组"
for (var index in myArray) {console.log(myArray[index]);  
}
//使用for in会遍历数组所有的可枚举属性,包括原型。例如上栗的原型方法method和name属性
//问题二:遍历顺序有可能不是按照实际数组的内部顺序

for in 遍历对象时候可以通过hasOwnPropery方法可以判断某属性是否是该对象的实例属性,如下:

for (var key in myObject) {if(myObject.hasOwnProperty(key)){console.log(key);}
}

或者ES5的Object.keys(myObject)获取对象的实例属性组成的数组,不包括原型方法和属性。

Object.prototype.method=function(){console.log(this);
}
var myObject={a:1,b:2,c:3
}
Object.keys(myObject).forEach(function(key,index){<br>  console.log(key,myObject[key])<br>})

 

6、遍历数组:使用 for(元素 of 数组) 的形式遍历数组

let arr01=[12,22,32,42];
for(let ele of arr01){   //for遍历所有的ele元素项console.log(ele);  //输出:12 22 32 42
}

7、forEach遍历数组:使用 forEach(元素 of 数组) 的形式遍历数组,使用如下:

//forEach(fn)方法将对数组中的每一个元素执行一次该fn匿名函数,其中ele是当前元素,index是当前元素的索引值,arr是原数组;
//匿名函数中的this指向window;
//forEach()方法无返回,是undefined;let arr01=['hello','world'];
arr01.forEach(function(ele,index,arr){  console.log(index);  console.log(ele);console.log(this); console.log(arr);//arr[1]="tom";  //可以通过索引对数组元素值进行修改}); //两次分别输出:0 hello window ['hello','world','tom'];  1 world window ['hello','world','tom'];
console.log(arr01);  //输出:['hello','world','tom'],所以forEach()并不会改变原数组

8、 map遍历数组:使用 map(function(ele,index,arr){ return XXX;}) 的形式遍历数组,使用如下:

//arr.map()中的匿名函数中的参数ele、index、arr分别表示遍历数组时当前对象元素、当前索引值、原有数组;
//arr.map()会返回一个新的数组,但不改变原有数组;方法中的this指向window;
//arr.map() 和arr.forEach()方法都不会对空数组进行执行;
//map()方法浏览器支持:ie9+  Safari1.5+let oldArr=[1,2,3];
let newArr=oldArr.map(function(ele,index,arr){console.log("原有数组元素"+index+":"+ele+"/"+arr[index]);console.log(this);return ele*2;
});
console.log(newArr);  //输出:[2, 4, 6]let arr1=[];
let newArr1=arr1.map(function(){return ele;
})
console.log("空数组使用map方法:"+newArr1);  //输出为:空数组使用map方法:

注意:forEach() 和 map() 以及 filter() 方法只能遍历数组;

9、 filter遍历数组:使用 filter(fn) 方法过滤 数组中的每一项,返回满足条件的项组成新的数组

//filter()不改变原有数组,返回符合过滤条件的项并组成新的数组;方法中的this指向window;
let arr1=[1,2,3,4,5,6,7,8,9,10];
let newArr=arr1.filter(function(ele,index,arr){//console.log(this);return ele%3==0 &&ele>5;
});
console.log(arr1);  //输出:[1,2,3,4,5,6,7,8,9,10]
console.log(newArr);  //输出:[6,9]

 

10、js数组 push() 方法:使用 arr.push(ele) 方法在数组尾部添加一个或多个元素,并返回新的长度

let arr1=[1,2,3];
let b=arr1.push(55,66);
console.log(arr1); //输出:[1,2,3,55,66] 元素被添加到数组尾部
console.log(b); //输出:5 ,返回的是新的长度

11、js数组 pop() 方法:使用 arr.pop() 方法删除数组尾部元素,并返回被删除的元素

let arr1=[0,2,4,6];
let b=arr1.pop();
console.log(arr1); //输出:[0,2,4]
console.log(b); //输出:6

12、js数组 unshift() 方法:使用 arr.unshift() 方法在数组开头添加一个或多个元素,并返回新的长度

let arr1=[0,2,4,6];
let b=arr1.unshift(77,88);
console.log(arr1); //输出:[77,880,0,2,4,6]
console.log(b); //输出:6

13、js数组 shift() 方法:使用 arr.shift() 方法删除并返回数组的第一个元素

let arr1=[0,2,4,6];
let b=arr1.shift();
console.log(arr1); //输出:[2,4,6]
console.log(b); //输出:0

14、js数组 slice() 方法:使用 arr.slice(index1,index2) 方法获取数组开始下标到结束下标之间的元素组成一个新的数组

let arr1=[0,2,4,6,8];
let b=arr1.slice(2,4);
let c=arr1.slice(2);
console.log(arr1); //输出:[0,2,4,6,8]
console.log(b); //输出:[4,6]  //包括起始下标对应的元素,不包括结束下标对应的元素
console.log(c); //输出:[4,6,8]  //获取数组指定下表后的数据并返回新的结果数组

15、js数组 splice() 方法:使用 splice(start,deleteCount,val1,val2)方法从start位置开始删除deleteCount项,再插入值val1、val2 ,并返回删除的数组

let arr1=[66,22,33,4,55,11];
let b=arr1.splice(1,2,111,222);  //所以这里删除了22和33,接着添加了111和2222
console.log(arr1); //输出:[66,111,222,4,55,11]
console.log(b); //输出:[22,33]  //返回了删除的数组

16、js数组 concat()合并 方法:使用 arr.concat(arr1,arr2) 方法合并两个或更多的数组,并返回合并后的结果数组。

let arr1=[1,22,33,44,55];
let arr2=[100,200]
let d=arr1.concat(88,arr2);
console.log(d); //输出:[1,22,33,44,55,88,100,200]
console.log(arr1); //输出:[1,22,33,44,55] 不改变原来的数组
console.log(arr2); //输出:[100,200] 不改变原来的数组

17、js数组 join()合并 方法:使用 arr.join(separator) 方法将数组的所有项通过separator拼接成一个字符串

let arr1=['hello','every','body'];
let m=arr1.join('--');
console.log(m);  //输出:hello--every--body
console.log(arr1);  //原数组不变

18、js数组 sort()排序方法:使用 arr.sort() 方法会将数组的所有项toString()转型成字符串,所以sort方法比较的是字符串,所以会出现3>13的错误如下,所以这里使用函数作为参数来调用解决问题

let arr1=[1,22,13,52,3];
let m=arr1.sort();
console.log(m);  //输出:[1, 13, 22, 3, 52],比较的是字符串大小let n=arr1.sort(function(a,b){return a-b;});  
console.log(n); //升序输出:[1, 3, 13, 22, 52],所以这里使用函数作为参数来调用let arr2=[1,22,13,52,3];
let k=arr2.sort(function(a,b){return b-a;});
console.log(k); //降序输出:[52, 22, 13, 3, 1]
let arr1=["hello","world","tom"];
let m=arr1.sort();
console.log(m);  //输出:["hello", "tom", "world"],可以字符串排序
console.log(arr1);  //输出:["hello", "tom", "world"],原数组改变

19、js数组 reverse()反转方法:使用 arr.reverse() 方法反转数组所有元素项的顺序

let arr1=["hello","world","tom"];
let m=arr1.reverse();
console.log(m);  //输出:["tom", "world", "hello"]
console.log(arr1);  //输出:["tom", "world", "hello"], 原数组改变

20、js数组 indexOf() 搜索位置方法:使用 arr.indexOf() 方法返回数组中指定元素所在位置,从数组开头往结尾查找

let arr1=["hello","world","tom","world"];
let m=arr1.indexOf("world");
let n=arr1.indexOf("world",1); //第二个参数是可选参数,表示开始查找第一个参数的起点位置,返回从1的位置后第一次出现‘world’所在的位置
let k=arr1.lastIndexOf("hello",1); //从前往后查找,表示从数组的第二个元素开始查找‘hello’的位置
let j=arr1.lastIndexOf("Jane"); //没有找到将返回-1
console.log(m);  //输出:1
console.log(n);  //输出:1
console.log(k);  //输出:0
console.log(j);  //输出:-1
console.log(arr1);  //输出:["hello","world","tom","world"],原数组没有改变

21、js数组 lastIndexOf() 搜索位置方法:使用 arr.lastIndexOf() 方法返回数组中指定元素最后出现的位置,也就是最后一个该元素的位置

let arr1=["hello","world","tom","world"];
let m=arr1.lastIndexOf("tom");
let n=arr1.lastIndexOf("world");
let k=arr1.lastIndexOf("Jane");
console.log(m);  //输出:2
console.log(n);  //输出:3
console.log(k);  //输出:-1  ,没找到返回-1
console.log(arr1);  //输出:["hello","world","tom","world"],原数组没有改变

22、js数组 every() 方法:使用 arr.every() 方法检测数组元素的每个元素是否都符合条件。所有元素都符合条件则返回true

let arr1=[1,3,5,6,8];
let m=arr1.every(function(ele){return ele<10;
});
console.log(m);  //输出:true
console.log(arr1);  //原数组没有改变

23、js数组 some() 方法:使用 arr.some() 方法检测数组元素中是否有任意元素符合指定条件。任意元素符合条件则返回true

let arr1=[1,3,25,6,8];
let m=arr1.some(function(ele){return ele>10;
});
console.log(m);  //输出:true
console.log(arr1);  //原数组没有改变

24、js检查对象是不是数组:使用 Array.isArray(arr1) 方法 arr1 instanceof Array==true 和 arr1..constructor === Array来判定,在多个frame中来回穿梭时存在漏洞,因为每个iframe都有一套自己的执行环境,跨frame实例化的对象彼此是不共享原型链的

let arr01 = [2,4,6,8];
console.log(Array.isArray(arr01)); //输出:true ,该方法支持ie9+
//toString() 方法可把数组转换为字符串,并返回结果。元素之间用逗号连接//最佳写法如下:
let arr = [1,2,3,1];
let arr2 = [{ abac : 1, abc : 2 }];
function isArrayFn(value){if (typeof Array.isArray === "function") {return Array.isArray(value);}else{return Object.prototype.toString.call(value) === "[object Array]";}
}
alert(isArrayFn(arr));// true
alert(isArrayFn(arr2));// true

25、js数组 fill() 方法:使用 arr.fill() 方法是使用固定值来填充数组指定位置元素。类似于全体替换,浏览器ie12+支持

let arr1=['hello','every','body','Tom','Jane'];
arr1.fill('fun',1,3); //arry.fill(value,start,end)的三个参数分别表示填充的值、填充起始的位置、填充结束的位置
console.log(arr1); //输出:["hello", "fun", "fun", "Tom", "Jane"]

25、js数组 includes() 方法判断一个数组是否包含指定的元素;js数组 find(function(){}) 方法返回符合传入测试(函数)条件的数组元素中的第一个元素。但是浏览器支持都要求较高,这里不细说

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/554068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

老毛桃U盘快速装系统

第一步&#xff1a;准备工作 1、一个u盘&#xff08;大小在4G以上&#xff09;&#xff1b; 2、下载所需安装的win7、win8 系统ISO文件&#xff08;大小在4G左右&#xff0c;过小则说明IOS下载错误&#xff09;&#xff1b; 3、U盘爱动盘制作工具&#xff08;这里使用的是老…

禁止IE页面自动跳转到EDGE浏览器的方法教程

IE浏览器一直是我们最常用的浏览器&#xff0c;但是Windows系统在大力推广edge浏览器的时候强制原来的IE用户使用IE浏览器的时候直接跳转到edge浏览器。应该怎么禁止IE浏览器跳转edge浏览器呢?下面小编就带着大家一起学习一下吧! 设置步骤&#xff1a; 1、首先打开IE浏览器&…

Vuex使用详解,附加项目遇到的问题(简单明了)

Vuex的定义、个人理解和结构解析 vuex定义&#xff1a;vuex是一个专门为vue.js设计的集中式状态管理架构。 vuex的个人理解&#xff1a; 是存储公有状态数据state的一个仓库(store)&#xff1b;解决了大型应用时组件传参的繁杂和不易维护性&#xff1b;vuex的状态储存是响应的…

Chorme控制台console的用法;

前提&#xff1a;是谷歌浏览器&#xff01; IE8- 不支持console.log();会报错&#xff0c;解决如下&#xff1a; (function (){//创建空console对象&#xff0c;避免JS报错 if(!window.console) window.console {}; var console window.console; //添加console对象的方…

搜狗浏览器如何下载安装 安装搜狗浏览器的详细步骤

搜狗浏览器如何下载安装?搜狗浏览器是一款很不错的网页浏览软件&#xff0c;但是大家知道如何下载安装搜狗浏览器吗?不会的小伙伴就请跟着小编一起来看看安装搜狗浏览器的操作步骤吧。 方法/步骤 1、我们寻找搜狗浏览器官方版本&#xff0c;点击搜寻。 2、可以选择软件库下…

null、undefined、NaN区分解析和条件判定,以及在IF条件中的判定

NaN的理解和用法&#xff1a; NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。可以把 Number 对象设置为该值&#xff0c;来指示其不是数字值。 Number.NaN 是一个特殊值&#xff0c;说明某些算术运算&#xff08;如求负数的平方根&#xff09;的结果不是数…

360浏览器鼠标手势怎么关 取消360浏览器鼠标手势的方法

360浏览器鼠标手势怎么关?鼠标手势&#xff0c;也就是右键滑动动作&#xff0c;对于不习惯使用该功能的用户而言&#xff0c;是一项体验很差的功能&#xff0c;如果你也想要关闭该功能&#xff0c;可以参考下文中的方法进行处理&#xff0c;想要再次开启也可以这样操作。 1、…

vue数组修改不触发视图更新、vue向响应式对象添加或删除属性

背景&#xff1a;在vue开发中会遇到data数据更改后view试图不会进行响应式更新的情况 以下4种情况不触发vue响应式更新&#xff01;&#xff01; 不能检测到的数组变动是&#xff1a; 1、当利用索引直接设置一个项时&#xff0c;例如&#xff1a;vm.items[indexOfItem] newVal…

360浏览器怎样清除缓存

360浏览器怎样清除缓存?很多用户反应360浏览器跳转页面的速度越来越慢&#xff0c;其实这时候有可能是因为缓存太多&#xff0c;下面&#xff0c;小编就为大家介绍下360浏览器清除缓存方法。 1、点击浏览器右上角的“工具”菜单。 2、点击“清除上网痕迹”。 3、在清除上网…

vue.nextTick()方法的使用详解(简单明了)

什么是Vue.nextTick()&#xff1f;&#xff1f; 定义&#xff1a;在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法&#xff0c;获取更新后的 DOM。 所以就衍生出了这个获取更新后的DOM的Vue方法。所以放在Vue.nextTick()回调函数中的执行的应该是会…

猎豹浏览器网页声音怎么关闭 2步关闭网页声音

作为一款主打安全与极速特性的浏览器产品&#xff0c;猎豹浏览器在国内也有不少忠实的粉丝。不过&#xff0c;想要熟练的使用猎豹浏览器中的各种功能&#xff0c;其实并不容易!下面小编就来介绍一下猎豹浏览器关闭网页声音的方法&#xff0c;小伙伴们可不要错过了。 方法步骤 …

vue项目中全局引用jquery 、引用外部js的多种方式(外部纯函数js、外部自执行js、外部js插件),附niceScroll滚动条插件使用

vue项目中全局引用jquery &#xff1a; 1、“ npm install jquery --save ” 命令安装jquery 2、在项目根目录下的 build 目录下找到webpack.base.conf.js 文件&#xff0c;在开头使用以下代码引入webpack&#xff0c;如下 var webpack require(webpack) 3、在webpac…

隐藏浏览器滚动条但内容可以滚动的3种解决方式(简单清晰)

第一种&#xff1a;使用纯css样式属性隐藏滚动条 &#xff1a;火狐浏览器的css写法不兼容 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, i…

QQ浏览器登陆微信的方法

微信是腾讯旗下第二款即时通讯软件&#xff0c;简单明了的功能界面&#xff0c;简洁的聊天窗口收获了大量的用户&#xff0c;而且强大的在线支付功能与支付宝一同为现代中国的网络发展提供了巨大的推力。微信不同于QQ可以直接使用电脑客户端登陆&#xff0c;在早期更是只有手机…

vue生命周期详解、钩子函数的调用(简单易懂)

定义&#xff1a;vue的生命周期是指vue实例从初始化创建到实例销毁的过程。期间会有8个钩子函数的调用。 vue的钩子函数图解&#xff1a; vue的钩子函数使用总结&#xff1a; 1、beforeCreate&#xff08;创建前&#xff09;:beforeCreate钩子函数&#xff0c;这个时候&#x…

QQ浏览器如何查看网站保存的密码

小编日常使用的浏览器大多是QQ浏览器&#xff0c;基于腾讯QQ下的账号同步功能给我带来了许多方便&#xff0c;其中QQ浏览器的账号密码自动保存&#xff0c;同时通过云同步可以在各个终端同步账号密码&#xff0c;所以使用QQ浏览器对常用网络浏览时可以一键免密登录&#xff0c;…

vue-router详尽:编程式导航、路由重定向、动态路由匹配、路由别名、嵌套路由、命名视图

vue-router编程式导航 在vue项目中经常用到this.$router.push() 和 this.$router.replace() 方法进行路由跳转就是编程式导航。。。 通俗理解编程式导航&#xff1a;通过操作$router实例的JavaScript代码实现路由跳转。点击 <router-link :to"..."> 等同于调用…

win10 edge默认浏览器设置更改教程

win10 edge默认浏览器设置更改教程 win10 edge默认浏览器怎么设置?在Win10中&#xff0c;默认浏览器修改已经不再像以前Win7/Win8.1那样容易&#xff0c;已经不能直接通过第三方浏览器设置直接修改&#xff0c;要用到新的“招数”&#xff0c;用户需在“设置”中手动修改。如…

ie浏览器ip代理怎么设置

核心提示&#xff1a;经常上网的朋友经常会遇到想使用代理IP上网的情况&#xff0c;但是又苦恼不知道怎么设置&#xff0c;小编这就告诉大家怎么在IE浏览器上设置代理IP上网。 ie浏览器ip代理怎么设置&#xff1f;经常上网的朋友经常会遇到想使用代理IP上网的情况&#xff0c;…

理解JavaScript中this的指向详解

this的定义和理解&#xff1a; this是JavaScript语言的一个关键字&#xff0c;它是函数运行时&#xff0c;在函数体内部自动生成的一个对象&#xff0c;只能在函数体内使用。 1、this和执行环境对象有关&#xff0c;和函数的声明无关。 var name"Tom";var Bob{name:…