【问题标题】:Javascript check if all values in an object array are emptyJavascript 检查对象数组中的所有值是否为空
【发布时间】:2021-05-01 04:45:31
【问题描述】:

我有一个如下所示的数组。

let report = [
  {0: { error1: '', error2: ''}},
  {1: { error1: '', error2: ''}}
]

我想检查所有错误值是否为空。 然后基于该结果,我将启用或禁用一个按钮。如果所有错误值为空,则将启用保存按钮。 我怎样才能做到这一点?

【问题讨论】:

  • 到目前为止你有什么尝试?
  • 检查它的语法report,没有发现任何有用的东西。

标签: javascript reactjs ecmascript-6 lodash


【解决方案1】:

看这个:

let report = [
  { 0: { error1: "", error2: "" } },
  { 1: { error1: "", error2: "" } },
];

const testToSeeAllErrorsAreEmpty = report.every((item) =>
  Object.values(item).every((objContainsErrors) =>
    Object.values(objContainsErrors).every((error) => !error)
  )
);

console.log("testToSeeAllErrorsAreEmpty: ", testToSeeAllErrorsAreEmpty)

【讨论】:

    【解决方案2】:

    这个递归函数检查一个对象(或数组)是否为空,如果不是则迭代它的属性,并检查它们是否为空。如果 a 属性是一个对象(或数组),该函数会检查它是否为空,依此类推。只有当所有叶子都为空时,该函数才返回true

    const checkEmptyLeaves = o => {
      if(_.isObject(o)) return _.isEmpty(o) || _.every(o, checkEmptyLeaves);
      
      return _.isEmpty(o);
    };
    
    const report1 = [
      { 0: { error1: "", error2: "" } },
      { 1: { error1: "", error2: "" } },
    ];
    
    const report2 = [
      { 0: { error1: "", error2: { message: "some message" } } },
      { 1: { error1: "", error2: "" } },
    ];
    
    console.log(checkEmptyLeaves(report1));
    console.log(checkEmptyLeaves(report2));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"></script>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 2021-05-12
      • 2018-09-29
      • 2020-09-27
      相关资源
      最近更新 更多