使用`array.some()`而不是boolean返回一个元素

时间:2017-02-06 15:20:01

标签: javascript arrays map-function

我正在尝试使用array.some函数迭代一些数据,如果if语句成功,则返回field

我发现正在发生的事情是,我得到一个布尔返回,例如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包含一个元素。我希望返回field但是当我选中invalidField时,我会true而不是

3 个答案:

答案 0 :(得分:6)

Array.prototype.some()仅检查数组中的某个元素是否通过了回调函数中定义的测试。您应该使用返回第一个元素passig test

的数组find方法

答案 1 :(得分:1)

您正在寻找Array.prototype.filter而不是Array.prototype.some

过滤器会执行您当前期望some()执行的操作。如果一个或多个元素符合您的条件,some()会返回一个布尔值,而filter()会创建符合您条件的新元素数组。

答案 2 :(得分:1)

要获取元素,您需要使用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];
  }
}

如果您只想返回第一个,可以使用array.find()

toggleClass()