JavaScript对象——遍历

本文介绍了JavaScript中的四种数据结构:数组、对象、Map和Set。详细解释了Map和Set的创建、操作方法及如何进行遍历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值