关于遍历一个对象

2018-05-20 23:36:33 +08:00
 fulvaz

使用 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], 很令人伤心.

4283 次点击
所在节点    JavaScript
12 条回复
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
2018-05-21 05:04:53 +08:00
@nikolai for...in 必须加上 hasOwnProperty.
artandlol
2018-05-21 07:09:03 +08:00
首先你要有个对象
meszyouh
2018-05-21 07:12:23 +08:00
Object.values
zhlssg
2018-05-21 07:46:10 +08:00
Nice
Mutoo
2018-05-21 08:06:15 +08:00
h1367500190
2018-05-21 08:24:03 +08:00
Object.entries 和 Object.values 好像是同属一个 stage 吧?
h1367500190
2018-05-21 08:25:27 +08:00
@Mutoo Set Map 序列化和反序列化挺麻烦的
sxy62016
2018-05-21 09:42:47 +08:00
var obj = Object.create(null)
DOLLOR
2018-05-21 10:17:09 +08:00
Object.keys()、Object.entries()、Object.values()还满足不了大部分场景么?
如果还不够,那还有 Object.getOwnPropertyNames()、Object.getOwnPropertyDescriptors()、Reflect.ownKeys()。
VDimos
2018-05-21 10:21:25 +08:00
for in 遍历会遍历原型的,object.keys 不会。然而通常情况下 for in 就行了,毕竟一般 object 原型都是不可枚举的
fulvaz
2018-05-21 13:03:57 +08:00
@DOLLOR

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

@VDimos
我们这的 tslint 要求加, 当然加一个也是好习惯, 就是丑了点.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/456374

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX