首页 > 解决方案 > Javascript 迭代和检查数组元素的最佳方法

问题描述

有没有更好的方法来编写下面的代码。所以我希望如果任何行有无效字段,我想立即将结果返回为“false”,即我不想执行代码或检查循环中的任何其他行。

anyRowInvalid: function() {
    var items = this.get('sectionInformation.items');
    var isValid = true;

    for (let i=0; i < items.length; i++) {
      var gridItemObj = {};
      Object.keys(items[i]).forEach(function(itemkey) {
          if (typeof items[i][itemkey] === 'object') {
              if ((items[i][itemkey].valid) && (items[i][itemkey].valid === false)) {
                isValid = false;
              }
          }
      });              
    }
    return isValid;
},

标签: javascriptarraysecmascript-6

解决方案


您可以使用数组方法来简化循环every

anyRowInvalid: function() {
    var items = this.get('sectionInformation.items');

    return items.every(item => {
      return Object.values(item).every(value => { // valid if:
        return !value                             // is falsy
            || typeof value != "object"           // or is non-objects
            || !("valid" in value)                // or without "valid" property
            || value.valid;                       // or truthy "valid" property
      });
    });
},

every当第一个虚假值被击中时自动短路。下面的示例在nr设置为之后停止迭代4,因为这是第一次nr < 4评估为假值。

const array = Array.from({length: 10}, (_, index) => index);

array.every(nr => {
  console.log(nr);
  return nr < 4;
});


推荐阅读