【问题标题】:How to check any every array object property empty or not?如何检查每个数组对象属性是否为空?
【发布时间】:2021-12-21 08:47:24
【问题描述】:

函数的目的是在answers全部为空的时候得到false。目前,当只有一个 answers 为空并且其余的内部有数据时,一些如何得到 **false。

检查所有answers 是否为空的最佳方法是什么。没关系,有些有数据,有些没有。我只是想看看是否都是空的。

const questions = [{
    "answers": [{
        "value": "Browns",
        "selected": false,
      },
      {
        "value": "Oranges",
        "selected": false,
      },
      {
        "value": "Purples",
        "selected": false,
      }
    ],
    "info": "",
    "type": "DESELECT",
    "lastUpdated": "2021-11-01T22:50:28.359"
  },
  {
    "answers": [],
    "info": "",
    "type": "DESELECT",
    "lastUpdated": "2021-11-01T22:50:35.392"
  },
  {
    "answers": [{
        "value": "AnimalPrints",
        "selected": false,
      },
      {
        "value": "BigLogos",
        "selected": true,
      },
      {
        "value": "Floral",
        "selected": false,
      }
    ],
    "info": "",
    "type": "DESELECT",
    "lastUpdated": "2021-11-01T22:50:43.883"
  }
];

console.clear();
console.log("------------ES6------------");
const es6Result = questions.every((item) => !_.isEmpty(item.answers));
console.log(es6Result);

const lodashResult = _.every(questions, !_.isEmpty('answers'));
console.log("------------Lodash------------");
console.log(lodashResult);
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>

【问题讨论】:

    标签: javascript ecmascript-6 lodash is-empty


    【解决方案1】:

    我认为你描述的逻辑需要:

    const lodashResult = !_.every(questions, _.isEmpty('answers'));
    

    const es6Result = !questions.every((item) => _.isEmpty(item.answers));
    

    【讨论】:

      【解决方案2】:

      您可以使用.some(),如果至少1 个answers 不为空,您将获得true,如果所有answers 为空,您将获得false

      const es6Result = questions.some((item) => item.answers.length);
      

      【讨论】:

        【解决方案3】:

        const questions = [{
            "answers": [{
                "value": "Browns",
                "selected": false,
              },
              {
                "value": "Oranges",
                "selected": false,
              },
              {
                "value": "Purples",
                "selected": false,
              }
            ],
            "info": "",
            "type": "DESELECT",
            "lastUpdated": "2021-11-01T22:50:28.359"
          },
          {
            "answers": [],
            "info": "",
            "type": "DESELECT",
            "lastUpdated": "2021-11-01T22:50:35.392"
          },
          {
            "answers": [{
                "value": "AnimalPrints",
                "selected": false,
              },
              {
                "value": "BigLogos",
                "selected": true,
              },
              {
                "value": "Floral",
                "selected": false,
              }
            ],
            "info": "",
            "type": "DESELECT",
            "lastUpdated": "2021-11-01T22:50:43.883"
          }
        ];
        
        console.clear();
        console.log("------------ES6------------");
        const es6Result = questions.map((item) => _.isEmpty(item.answers)).indexOf(true) > -1;
        console.log(es6Result);
        <script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>

        【讨论】:

          【解决方案4】:

          这里真的不需要 lodash。使用Array.prototype.every

          你应该可以完成你想要的
          questions.every((item) => item.answers.length > 0)
          

          只要所有 'answers' 数组中包含一个或多个项目,这将始终返回 true,否则返回 false。 正如Georgy 所说,当您要检查至少一项时,可以使用Array.prototype.some

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-07-27
            • 2020-08-08
            • 2014-08-22
            • 1970-01-01
            • 2020-09-21
            • 1970-01-01
            • 1970-01-01
            • 2014-05-06
            相关资源
            最近更新 更多