一、遍历对象方法

1.for...in
遍历输出的是对象自身的属性以及原型链上可枚举的属性(不含Symbol属性),原型链上的属性最后输出说明先遍历的是自身的可枚举属性,后遍历原型链上的

eg:

  1. var obj = { 'name': "yayaya", 'age': '12', 'sex': 'female' };
  2. Object.prototype.pro1 = function() {};//在原型链上添加属性
  3. Object.defineProperty(obj, 'country', {
  4. Enumerable: true //可枚举
  5. });
  6. Object.defineProperty(obj, 'nation', {
  7. Enumerable: false //不可枚举
  8. })
  9. obj.contry = 'china';
  10. for (var index in obj) {
  11. console.log('key=', index, 'value=', obj[index])
  12. }

输出结果:

key = name value = yayaya
key = age value = 12
key = sex value = female
key = contry value = china
key = pro1 value = function(){}

2.Object.keys()
遍历对象返回的是一个包含对象自身可枚举属性的数组(不含Symbol属性).

eg:

  1. var obj = { 'name': "yayaya", 'age': '12', 'sex': 'female' };
  2. Object.prototype.pro1 = function() {}
  3. Object.defineProperty(obj, 'country', {
  4. Enumerable: true,
  5. value: 'ccc'
  6. });
  7. Object.defineProperty(obj, 'nation', {
  8. Enumerable: false //不可枚举
  9. })
  10. obj.contry = 'china';
  11. Object.keys(obj).forEach(function(index) {
  12. console.log(index, obj[index])
  13. });

输出结果:

name yayaya
age 12
sex female
contry china

3.Objcet.getOwnPropertyNames()
输出对象自身的可枚举和不可枚举属性的数组,不输出原型链上的属性

eg:

  1. var obj = { 'name': "yayaya", 'age': '12', 'sex': 'female' };
  2. Object.prototype.pro1 = function() {}
  3. Object.defineProperty(obj, 'country', {
  4. Enumerable: true,
  5. value: 'ccc'
  6. });
  7. Object.defineProperty(obj, 'nation', {
  8. Enumerable: false //不可枚举
  9. })
  10. obj.contry = 'china';
  11. Object.getOwnPropertyNames(obj).forEach(function(index) {
  12. console.log(index, obj[index])
  13. });

输出结果:
name yayaya
age 12
sex female
country ccc
nation undefined
contry china

4.Reflect.ownKeys()
返回对象自身的所有属性,不管属性名是Symbol或字符串,也不管是否可枚举.

eg:

  1. var obj = { 'name': "yayaya", 'age': '12', 'sex': 'female' };
  2. Object.prototype.pro1 = function() {}
  3. Object.defineProperty(obj, 'country', {
  4. Enumerable: true,
  5. value: 'ccc'
  6. });
  7. Object.defineProperty(obj, 'nation', {
  8. Enumerable: false //不可枚举
  9. })
  10. obj.contry = 'china';
  11. Reflect.ownKeys(obj).forEach(function(index) {
  12. console.log(index, obj[index])
  13. });

返回结果:
name yayaya
age 12
sex female
country ccc
nation undefined
contry china

5. _.keys
用underscore插件的遍历方法只可以遍历出对象自身的可枚举属性

eg:

  1. var obj = { 'name': "yayaya", 'age': '12', 'sex': 'female' };
  2. Object.prototype.pro1 = function() {}
  3. Object.defineProperty(obj, 'country', {
  4. Enumerable: true,
  5. value: 'ccc'
  6. });
  7. Object.defineProperty(obj, 'nation', {
  8. Enumerable: false //不可枚举
  9. })
  10. obj.contry = 'china';
  11. console.log(_.keys(obj));

输出结果:

name age sex country

二.遍历数组方法
1.forEach

eg:

  1. var arr = ['a', 'b', 'c', 'd'];
  2. arr.forEach(function(value, index) {
  3. console.log('value=', value, 'index=', index);
  4. })

输出结果:

value=a index=0
value=b index=1
value=c index=2
value=d index=3

2.map
可以对遍历的每一项做相应的处理,返回每次函数调用的结果组成的数组

eg:

  1. var arr = ['a', 'b', 'c', 'd'];
  2. arr.map(function(item, index, array) {
  3. console.log(item, index);
  4. })

输出结果:

a 0
b 1
c 2
d 3

3.for循环遍历

eg:

  1. var arr = ['a', 'b', 'c', 'd'];
  2. for (var i = 0; i < arr.length; i++) {
  3. console.log(i, arr[i])
  4. }

输出结果:

0 a
1 b
2 c
3 d

4.for...in

eg:

  1. var arr = ['a', 'b', 'c', 'd'];
  2. for (var i in arr) {
  3. console.log('index:', i, 'value:', arr[i])
  4. }

输出结果:

index:0 value:a
index:1 value:b
index:2 value:c
index:3 value:d

5.for...of(es6)
只遍历出value,不能遍历出下标,可遍历出Symbol数据类型的属性,此方法作为遍历所有数据结构的统一的方法

eg:

  1. var arr = ['a', 'b', 'c', 'd'];
  2. for (var value of arr) {
  3. console.log('value', value)
  4. }

输出结果:

value a
value b
value c
value d

6.利用underscore插件

eg:

  1. var arr = ['a', 'b', 'c', 'd'];
  2. var _ = require('underscore');
  3. _.each(arr, function(value, index, arr) {
  4. console.log(value, index, arr)
  5. })

输出结果:

a 0 ['a','b','c',''d]
b 1 ['a','b','c',''d]
c 2 ['a','b','c',''d]
d 3 ['a','b','c',''d]

js中遍历对象(5种)和遍历数组(6种)的方法总结(转载)的更多相关文章

  1. js中 json对象与json字符串相互转换的几种方式

    以下总结js中 json对象与json字符串相互转换的几种方式: 一.JSON对象转化为JSON字符串 1.使用JSON.stringify()方法进行转换 该方法不支持较老版本的IE浏览器,比如:i ...

  2. JavaScript学习12 JS中定义对象的几种方式

    JavaScript学习12 JS中定义对象的几种方式 JavaScript中没有类的概念,只有对象. 在JavaScript中定义对象可以采用以下几种方式: 1.基于已有对象扩充其属性和方法 2.工 ...

  3. JavaScript学习12 JS中定义对象的几种方式【转】

    avaScript学习12 JS中定义对象的几种方式 转自:  http://www.cnblogs.com/mengdd/p/3697255.html JavaScript中没有类的概念,只有对象. ...

  4. 浅解析js中的对象

    浅解析js中的对象 原文网址:http://www.cnblogs.com/foodoir/p/5971686.html,转载请注明出处. 前面的话: 说到对象,我首先想到的是每到过年过节见长辈的时候 ...

  5. JS中有关对象的继承以及实例化、浅拷贝深拷贝的奥秘

    一.属性的归属问题 JS对象中定义的属性和方法如果不是挂在原型链上的方法和属性(直接通过如类似x的方式进行定义)都只是在该对象上,对原型链上的没有影响.对于所有实例共用的方法可直接定义在原型链上这样实 ...

  6. JS中的对象和方法简单剖析

    众所周知,在js中对象就是精髓,不理解对象就是不理解js. 那么什么事js中的对象呢? 在js中,几乎一切皆对象: Boolean ,String,Number可以是对象(或者说原生数据被认作对象): ...

  7. 深入理解JS中的对象(二):new 的工作原理

    目录 序言 不同返回值的构造函数 深入 new 调用函数原理 总结 参考 1.序言 在 深入理解JS中的对象(一):原型.原型链和构造函数 中,我们分析了JS中是否一切皆对象以及对象的原型.原型链和构 ...

  8. js中判断对象具体类型

    大家可能知道js中判断对象类型可以用typeof来判断.看下面的情况 <script> alert(typeof 1);//number alert(typeof "2" ...

  9. js中XMLHttpRequest对象实现GET、POST异步传输

    js中XMLHttpRequest对象实现GET.POST异步传输 /* * 统一XHR接口 */ function createXHR() { // IE7+,Firefox, Opera, Chr ...

  10. js中推断对象详细类型

    大家可能知道js中推断对象类型能够用typeof来推断. 看以下的情况 <script> alert(typeof 1);//number alert(typeof "2&quo ...

随机推荐

  1. TDOA基站 之 时间同步

    TDOA 和 TWR相比,标签可以用最少的信息来定位,但是对于基站要求很高,需要“时间同步”. 这也是TDOA算法的核心部分,很多套件对此讳莫如深,希望能沟通过本文使读者能对TODA同步有一定初步了解 ...

  2. 有关求第n位xxx 的算法的问题

    最近,博客园上看到有关求 斐波那契数列的第n位是什么的问题.什么是 斐波那契数列? 我自己也忘记了,后来百度了下.http://baike.baidu.com/view/816.htm?fr=alad ...

  3. BUG----spark

    我也想说很尴尬, 搞到显现 发现 原来是个版本的bug spark 1.6.0  有个BUG 希望更多人看到 Traceback (most recent call last):  File &quo ...

  4. [GraphQL] Query GraphQL Interface Types in GraphQL Playground

    Interfaces are similar to Unions in that they provide a mechanism for dealing with different types o ...

  5. 引入其他服务器的JS文件,同时也引入本地JS文件 报错时:

    控制台报错: Uncaught ReferenceError: define is not defined at core.js:5

  6. Elasticsearch原理讲透

    小史是一个非科班的程序员,虽然学的是电子专业,但是通过自己的努力成功通过了面试,现在要开始迎接新生活了. 随着央视诗词大会的热播,小史开始对诗词感兴趣,最喜欢的就是飞花令的环节. 但是由于小史很久没有 ...

  7. bzoj 1415: [Noi2005]聪聪和可可 期望dp+记忆化搜索

    期望dp水题~ 你发现每一次肯定是贪心走 2 步,(只走一步的话就可能出现环) 然后令 $f[i][j]$ 表示聪在 $i$,可在 $j$,且聪先手两个人碰上面的期望最小次数. 用记忆化搜索转移就行了 ...

  8. TensorFlow(二):基本概念以及练习

    一:基本概念 1.使用图(graphs)来表示计算任务 2.在被称之为会话(Session)的上下文(context)中执行图 3.使用tensor表示数据 4.通过变量(Variable)维护状态 ...

  9. Luogu5540 最小乘积生成树

    Luogu5540 最小乘积生成树 题目链接:洛谷 题目描述:对于一个\(n\)个点\(m\)条边的无向连通图,每条边有两个边权\(a_i,b_i\),求使\((\sum a_i)\times (\s ...

  10. SSM整合小结

    基本环境搭建 pom依赖 <dependencies> <!--Junit--> <dependency> <groupId>junit</gro ...