V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
fulvaz
V2EX  ›  JavaScript

关于遍历一个对象

  •  
  •   fulvaz · 2018-05-20 23:36:33 +08:00 · 4504 次点击
    这是一个创建于 2379 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用 es6

    Object.entries(stashData).forEach(([key, value]) => {
         // do something with key and value           
    });
    

    而不是

    Object.keys(stashData).forEach((key) => {
         // do something with key and stashData[key]           
    });
    

    为什么不用 for...in

    这个更令人讨厌, 因为需要使用 hasOwnProperty. 随便加个 if 然后代码都会恶心.

    然而还是没法直接访问 stashData[key], 很令人伤心.

    12 条回复    2018-05-21 13:03:57 +08:00
    nikolai
        1
    nikolai  
       2018-05-21 03:34:21 +08:00
    ```
    var object = { a: 10, b: 20 };

    for (var key in object) {
    var x = object[key];
    console.log(x); // 10
    // 20
    }
    ```
    fulvaz
        2
    fulvaz  
    OP
       2018-05-21 05:04:53 +08:00
    @nikolai for...in 必须加上 hasOwnProperty.
    artandlol
        3
    artandlol  
       2018-05-21 07:09:03 +08:00 via iPhone
    首先你要有个对象
    meszyouh
        4
    meszyouh  
       2018-05-21 07:12:23 +08:00 via Android
    Object.values
    zhlssg
        5
    zhlssg  
       2018-05-21 07:46:10 +08:00 via iPhone
    Nice
    Mutoo
        6
    Mutoo  
       2018-05-21 08:06:15 +08:00
    h1367500190
        7
    h1367500190  
       2018-05-21 08:24:03 +08:00
    Object.entries 和 Object.values 好像是同属一个 stage 吧?
    h1367500190
        8
    h1367500190  
       2018-05-21 08:25:27 +08:00
    @Mutoo Set Map 序列化和反序列化挺麻烦的
    sxy62016
        9
    sxy62016  
       2018-05-21 09:42:47 +08:00 via Android
    var obj = Object.create(null)
    DOLLOR
        10
    DOLLOR  
       2018-05-21 10:17:09 +08:00
    Object.keys()、Object.entries()、Object.values()还满足不了大部分场景么?
    如果还不够,那还有 Object.getOwnPropertyNames()、Object.getOwnPropertyDescriptors()、Reflect.ownKeys()。
    VDimos
        11
    VDimos  
       2018-05-21 10:21:25 +08:00 via Android
    for in 遍历会遍历原型的,object.keys 不会。然而通常情况下 for in 就行了,毕竟一般 object 原型都是不可枚举的
    fulvaz
        12
    fulvaz  
    OP
       2018-05-21 13:03:57 +08:00
    @DOLLOR

    你看, `[obja, objb, objc].forEach((arrElement) => { ...do something with element })`, 数组遍历方法可以直接访问数组内的元素, 然后直接对数组内元素进行操作, 而对象的遍历方法就不行了.

    @VDimos
    我们这的 tslint 要求加, 当然加一个也是好习惯, 就是丑了点.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2442 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:54 · PVG 23:54 · LAX 07:54 · JFK 10:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.