JS数组find()返回find元素以外的东西

时间:2017-01-20 19:23:49

标签: javascript arrays ecmascript-6

这里有一些代码针对expensiveOperation函数运行数组中的每个值,并返回符合某些条件的第一个代码。

let result = [1, 2, 3, 4, 5].find(value => {
  let newValue = expensiveOperation(value)
  return meetsCritera(newValue)
}
result = expensiveOperation(result)

但是find函数返回的是数组值(例如3),而不是expensiveOperation(3)的结果。要获得最终值,我需要在expensiveOperation的正文之外再次运行find

如何避免再次运行并从find返回所需的值。还有其他ES6阵列功能可以让我这样做吗?

3 个答案:

答案 0 :(得分:2)

你可以随时使用一个好的旧循环:

let result;
for (let value of [1, 2, 3, 4, 5]) {
  let newValue = expensiveOperation(value);
  if (meetsCritera(newValue)) {
    result = newValue;
    break;
  }
}

答案 1 :(得分:1)

如果符合条件,您可以使用Array#some并退出循环。

var expensiveOperation = a => 3 * a,
    meetsCritera = v => v > 10,
    result = (() => {
        var newValue;
        return [1, 2, 3, 4, 5].some(value => {
            newValue = expensiveOperation(value);
            return meetsCritera(newValue);
        }) && newValue;
    })();

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
    

答案 2 :(得分:1)

.reduce这是一个不错的用例。

let result = [1, 2, 3, 4, 5].reduce((result, value) => {
  if (result) return result;

  let newValue = expensiveOperation(value)
  if (meetsCritera(newValue)) return newValue;
}, null);