Return 使用“array.some()”而不是布尔值的元素

Return an element using `array.some()` instead of boolean

我正在尝试使用 array.some 函数遍历一些数据和 return 我的 field 如果 if 语句成功。

我发现的是,我得到的是布尔值 return 例如 true 而不是实际变量(包含元素的详细信息)。

for (var index in allFields) {
      const invalidField = allFields[index].some(function (field){
        if (!validation.getIn([index,field.dataset.fieldKey,'isValid'])) {
          return field;
        }
      });
      if (invalidField) {
        return invalidField;
      }
    }

我的代码循环遍历 allFields,其中包含索引下的字段列表。然后它将每个 fieldKey 与另一组名为 validation.

的数据进行比较

field 包含一个元素。我希望 return field 但是当我检查 invalidField 我得到 true 而不是元素

您正在寻找 Array.prototype.filter instead of Array.prototype.some

Filter 执行您目前期望 some() 执行的操作。 some() returns 如果 1 个或多个元素符合您的条件,则返回一个布尔值,而 filter() 创建一个新的元素数组,满足您的条件。

获取元素需要使用array.filter()

for (var index in allFields) {
  const invalidField = allFields[index].filter(function (field){
    if (!validation.getIn([index,field.dataset.fieldKey,'isValid'])) {
      return field;
    }
  });
  if (invalidField.length > 0) { //check if returned anything
    return invalidField[0];
  }
}

如果你只想return第一个,你可以使用array.find()

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find

Array.prototype.some() 仅检查数组中的任何元素是否通过回调函数中定义的测试。您应该使用数组 find 方法,其中 returns 第一个元素 passig test