对象的迭代
在JS有史以来的大部分时间内,迭代对象属性都是一个难题。
ES2016 后面,引入了一些方法,使对象的迭代变得更加方便
今天就从一个对象结构的数据,疯狂练习一下这些方法😄
今天的主角
- Object.keys(obj) —— 返回一个包含该对象所有的键的数组。
- Object.values(obj) —— 返回一个包含该对象所有的值的数组。
- Object.entries(obj) —— 返回一个包含该对象所有 [key, value] 键值对的数组。
- Object.fromEntries(obj) - 把键值对列表转换为一个对象
练习题目
假设你有以下三个员工,要对他们的薪水,进行一些计算
let salaries = {
John: 100,
Pete: 300,
Mary: 250,
};
- 属性值求和
- 计算属性的数量
- 属性值翻倍
- 计算属性值的最大值。并且返回最大值的属性,属性值
可以先不看下面的实现,先写一下🏷🏷🏷🏷
属性值求和
(function () {
let salaries = {
John: 100,
Pete: 300,
Mary: 250,
};
const sumSalaries = (salaries) => {
let sum = 0;
for (let value of Object.values(salaries)) {
sum += value;
}
return sum;
};
console.log('sumSalaries', sumSalaries(salaries));
})();
计算属性的数量
(function () {
let salaries = {
John: 100,
Pete: 300,
Mary: 250,
};
const countSalaries = (salaries) => {
return Object.keys(salaries).length;
};
console.log('countSalaries', countSalaries(salaries));
})();
属性值翻倍
(function () {
let salaries = {
John: 100,
Pete: 300,
Mary: 250,
};
const doubleSalaries = (salaries) => {
return Object.fromEntries(
Object.entries(salaries).map(([k, v]) => [k, v * 2])
);
};
console.log('countSalaries', doubleSalaries(salaries));
})();
计算属性值的最大值
(function () {
let salaries = {
John: 100,
Pete: 300,
Mary: 250,
};
const maxSalaries = (salaries) => {
let max = 0,
maxValue = '';
for (let [k, v] of Object.entries(salaries)) {
if (max < v) {
max = v;
maxValue= k;
}
}
return {
max,
maxValue
}
};
console.log('maxSalaries', maxSalaries(salaries));
})();