JavaScript对象——遍历

JavaScript中的数据结构有四种:

  • 数组(也是对象)
  • 对象
  • Map(ES6新增)
  • Set(ES6新增)

数组和对象大家应该很熟悉了,下面介绍一下Map和Set。

Map

学过Java的同学应该很清楚(我怎么感觉JavaScript越来越像Java了。。。)
定义一个Map:

var map = new Map([["a",1],["b",2]]);    //二维数组
map.set("c",3);    //增加元素
map.delete("c");   //删除元素
map.set("b",3);    //修改元素
map.set("b",4);    //覆盖前面的3
map.get("b");      //4,根据键查找值
map.has("a");      //true,是否存在键"a"
或者
var map = new Map();    //空
map.set("a",1);

Set

只存储键,键不能重复。

定义一个Set:

var set = new Set();    //空
或者
var set = new Set([1,2,3]);    //一维数组
set.add(4);    //set {1, 2, 3, 4},添加元素
set.add(4);    //set {1, 2, 3, 4},重复添加,无效果
set.delete(4);    //set {1, 2, 3},删除元素
set.add("1");    //set {1, 2, 3, "1"},1"1"不一样

遍历

Array、Map、Set都属于ES6新引入的iterable类型。可以通过ES6新引入的for..of语法遍历。

var arr = ['A', 'B', 'C'];
var set = new Set(['A', 'B', 'C']);
var map = new Map([[1, 'a'], [2, 'b'], [3, 'c']]);

for(var v of arr) {
    console.log(v);    //A,B,C
}

for(var v of set) {
    console.log(v);    //A,B,C
}

for(var v of map) {
    console.log(v);    
    //[1, "a"]
    //[2, "b"]
    //[3, "c"]
}

有同学可能疑问了,对象不能用for..of吗?试一下:

var obj = {"a":1, "b":2, "c":3};
for(var v of obj) {
    console.log(v);    //TypeError
}

不行哦!为什么呢?因为对象没有内置迭代器。for..of循环首先会向被访问的对象请求一个迭代器对象,然后调用迭代器对象的next()方法来遍历所有返回值。
当然,我们也可以给对象定义迭代器,让它可以利用for..of遍历。

var myObject = {
    a: 2,
    b: 3
};

Object.defineProperty( myObject, Symbol.iterator, {
    enumerable: false,
    writable: false,
    configurable: true,
    value: function() {
        var o = this;
        var idx = 0;
        var ks = Object.keys( o );
        return {
        next: function() {
            return {
                value: o[ks[idx++]],
                done: (idx > ks.length)
                };
            }
        };
    }
} );

for (var v of myObject) {
    console.log( v );    //2,3
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript遍历对象属性的方法有多种。其中,常用的方法有: 1. 使用for...in循环:for...in可以遍历对象的可枚举属性,包括原型链上的属性。可以通过判断hasOwnProperty方法来过滤掉原型链上的属性。例如: ```javascript let obj = {type: 1, keyword: "js"}; for (let key in obj) { if (obj.hasOwnProperty(key)) { console.log(key, obj[key]); } } ``` 2. 使用Object.keys()方法:Object.keys()返回一个由对象的可枚举属性组成的数组。可以遍历对象的可枚举属性,不包括原型链上的属性。例如: ```javascript let obj = {type: 1, keyword: "js"}; Object.keys(obj).forEach(key => console.log(key, obj[key])); ``` 3. 使用Object.getOwnPropertyNames()方法:Object.getOwnPropertyNames()返回一个由对象的所有属性(包括可枚举和不可枚举属性)组成的数组。可以遍历对象的所有属性,不包括原型链上的属性。例如: ```javascript let obj = {type: 1, keyword: "js"}; Object.getOwnPropertyNames(obj).forEach(key => console.log(key, obj[key])); ``` 4. 使用Object.getOwnPropertySymbols()方法:Object.getOwnPropertySymbols()返回一个由对象的所有Symbol属性组成的数组。只能遍历对象的Symbol属性,不包括其他非Symbol属性。例如: ```javascript let obj = {type: 1, keyword: "js"}; Object.getOwnPropertySymbols(obj).forEach(key => console.log(key, obj[key])); ``` 这些方法可以根据需要选择使用,以实现对对象属性的遍历。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [JS遍历对象属性的7种方式](https://blog.csdn.net/weixin_40895135/article/details/126584088)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [JS——遍历对象方法总结](https://blog.csdn.net/weixin_49392771/article/details/123354161)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值