练习 Object.keys,values,entries

172 阅读1分钟

对象的迭代

在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));
})();