ECMAScript 2019 中的新特性:Object.values 和 Object.entries 方法的使用和优化
ECMAScript 2019 带来了两个新的方法:Object.values 和 Object.entries。这两个方法都是用来操作对象的,下面我们来详细了解一下它们的使用和优化。
- Object.values
Object.values 方法可以将一个对象属性的值转换成一个数组。它的语法如下:
Object.values(obj)
其中,obj 表示对象。这个方法会返回一个由目标对象的所有属性值组成的数组。
这个方法可以用在很多地方。例如,我们可以很方便地将一个对象的属性值遍历到一个数组中:
const obj = {a: 1, b: 2, c: 3} const arr = Object.values(obj) console.log(arr) // [1, 2, 3]
我们也可以用这个方法来过滤对象的属性值,比如只要大于 1 的属性值:
const obj = {a: 1, b: 2, c: 3} const arr = Object.values(obj).filter(val => val > 1) console.log(arr) // [2, 3]
- Object.entries
Object.entries 与 Object.values 很像,但它返回的是一个包含目标对象所有的属性名和属性值的二维数组。它的语法如下:
Object.entries(obj)
其中,obj 表示对象,返回的结果是一个二维数组。
使用这个方法的例子:
const obj = {a: 1, b: 2, c: 3} const entries = Object.entries(obj) console.log(entries) // [['a', 1], ['b', 2], ['c', 3]]
这个方法也可以用来过滤对象的属性,只保留大于 1 的属性:
const obj = {a: 1, b: 2, c: 3} const entries = Object.entries(obj).filter(entry => entry[1] > 1) console.log(entries) // [['b', 2], ['c', 3]]
- 性能优化
上面两个方法看起来很简单,但有时候我们需要处理大量的数据,而这个方法的性能需要注意。例如,使用 for-in 循环遍历属性比使用 Object.values 快得多。
我们可以测试一下以下代码的性能:
-- -------------------- ---- ------- ----- ------- - -- --- ---- - - -- - - ------- ---- - -------------------- - - - ----------------------------- ----- ---------- - ---------------------- -------------------------------- ---------------------- ----- --------- - -- --- ------ --- -- -------- - -- ---------------------------------------------- ----- - ---------------------------- - - -------------------------
运行一下,可以看到 for-in 这种方式的速度是 Object.values 快了约 10 倍。这是因为 for-in 只需要访问对象的属性,而 Object.values 和 Object.entries 需要把属性的值和键都复制到内存中,可能会带来一些性能问题。
- 总结
ECMAScript 2019 引入了 Object.values 和 Object.entries,这两个方法能够更方便地操作对象属性值。但在实际使用中,我们需要注意时刻关注性能问题,并选择最合适的方法来操作我们的数据。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64f47c9bf6b2d6eab3d7ad1f