在前端开发中,我们经常会遇到需要遍历对象属性的情况,此时我们通常会使用 Object.keys() 方法来进行遍历。但是,ES8 中新增了 Object.shape() 方法,可以更加方便地遍历对象的键和值,而且代码更加简洁易读,下面我们来详细了解一下如何使用 Object.shape()。
Object.keys() 的缺陷
在介绍 Object.shape() 之前,我们先来了解一下 Object.keys() 的问题。Object.keys() 方法返回给定对象可枚举属性的属性名数组。例如:
const person = { name: 'Tom', age: 20 }; console.log(Object.keys(person)); // 输出 ['name', 'age']
然而,Object.keys() 只能获取对象的键,而不能获取键对应的值。如果我们需要同时获取键和值,需要通过循环遍历对象来实现。例如:
const person = { name: 'Tom', age: 20 }; Object.keys(person).forEach(key => { console.log(`${key}:${person[key]}`); }); // 输出 'name:Tom' 和 'age:20'
这样的代码会显得比较繁琐,不易读和维护。
Object.shape() 的优势
相对于 Object.keys() 方法,Object.shape() 方法更加方便和简洁。Object.shape() 方法返回一个可枚举属性键值对的数组,即一个形如 [key, value] 的二维数组。例如:
const person = { name: 'Tom', age: 20 }; console.log(Object.entries(person)); // 输出 [ ['name', 'Tom'], ['age', 20] ]
通过 Object.shape(),我们可以一步到位地获取对象的键和值,不用额外循环遍历对象。例如:
const person = { name: 'Tom', age: 20 }; Object.entries(person).forEach(([key, value]) => { console.log(`${key}:${value}`); }); // 输出 'name:Tom' 和 'age:20'
相对于 Object.keys(),通过 Object.shape() 可以让代码更加短小精悍,不仅能增加代码的可读性,也能提高工作效率。
使用 Object.shape() 的示例
下面是一个使用 Object.shape() 的示例,我们用它来实现一个简单的学生成绩统计函数:
// javascriptcn.com 代码示例 const scores = [ { name: 'Tom', math: 80, english: 70 }, { name: 'Jerry', math: 90, english: 85 }, { name: 'Mickey', math: 85, english: 75 } ]; function calculateTotalScore(scores) { const totalScore = {}; scores.forEach(score => { Object.entries(score).forEach(([key, value]) => { if(key !== 'name') { totalScore[key] = totalScore[key] || 0; totalScore[key] += value; } }); }); return totalScore; } console.log(calculateTotalScore(scores)); // 输出 { math: 255, english: 230 }
在这个示例中,我们使用了 Object.shape() 来遍历每一个学生的成绩,并统计了所有学生的总成绩。通过这个示例,我们能够更直观地感受到 Object.shape() 的便利之处。
总结
Object.shape() 是 ES8 中一个非常实用的方法,它让我们能够更方便地遍历对象的键和值,并且能够编写更加简洁易读的代码。在开发中,我们应该多加利用这个方法,以提高我们自己的开发效率。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6544cd287d4982a6ebea1358