返回博客

优雅的 JavaScript 对象值判断和重置

本文介绍了两种判断 JavaScript 对象值是否都为 `true` 的方法,并提供了一种重置对象值为 `false` 的优化方案。比较了循环判断和 `Object.values().every()` 方法的效率和优雅性。

Mt.r
|

问题

只要有一个对象的值为非 true,则返回 true

let test = {
  a: true,
  b: true,
  c: true,
  d: false,
};

解决方法

我自己开始傻傻的写了个循环去判断,群里也顺便问了一下有没有更优雅的解法,还真有

我的写法

function isTrue(params) {
  for (const key in params) {
    if (Object.hasOwnProperty.call(params, key)) {
      const element = params[key];
      if (element !== true) {
        return false;
      }
    }
  }
  return true;
}

群友(@北京 - 菜鸟 - 板板/yt)的解法

Object.values(test).every((item) => item === true);

大佬的解法是不是更优雅?

后记

后来期望加一个可以复位对象的值为 false 的方法

function resetFalse(params) {
  let obj = {};
  for (const key in params) {
    if (Object.hasOwnProperty.call(params, key)) {
      obj[key] = false;
    }
  }
  return obj;
}

在群里问了一圈,被 diss 了,没错,被 diss 了。这都是简单的基操,,我就是想提升一下自己,学习更好的解法。