获取返回值并在JavaScript中退出forEach?

Mar*_*yam 14 javascript

如何修改此代码以便我可以获取field.DependencyFieldEvaluated值并在获得此值后立即退出函数?

function discoverDependentFields(fields) {
                    fields.forEach(function (field) {
                        if (field.DependencyField) {
                            var foundFields = fields.filter(function (fieldToFind) { return fieldToFind.Name === field.DependencyField; });
                            if (foundFields.length === 1) {
                               return field.DependencyFieldEvaluated = foundFields[0];

                            }
                        }
                    });
                }
Run Code Online (Sandbox Code Playgroud)

lxe*_*lxe 13

使用一个好的旧香草循环:

function discoverDependentFields(fields) {
  for (var fieldIndex = 0; fieldIndex < fields.length; fieldIndex ++) {
    var field = fields[fieldIndex];

    if (field.DependencyField) {
      var foundFields = fields.filter(function(fieldToFind) {
        return fieldToFind.Name === field.DependencyField;
      });
      if (foundFields.length === 1) {
        return foundFields[0];
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

好吧,如果你想保持幻想,请filter再次使用:

function discoverDependentFields(fields) {
  return fields.filter(function(field) {
    if (field.DependencyField) {
      var foundFields = fields.filter(function(fieldToFind) {
        return fieldToFind.Name === field.DependencyField;
      });
      if (foundFields.length === 1) {
        return foundFields[0];
      }
    }
  })[0];
}
Run Code Online (Sandbox Code Playgroud)


beh*_*ati 5

代替fields.forEach,您可以使用fields.map。这是一个例子:

var source=[1,2,3,4,5];

var destination=source.map(function(item){
 if(item==3)
     return 'OUTPUT';
}).filter(function(item){return item;})[0];

console.log(destination); // prints 'OUTPUT'
Run Code Online (Sandbox Code Playgroud)