javascript - 过滤直到第一次满足某些条件

标签 javascript

这不是一个现实世界的例子,我过度简化了它。给出这个数组:

const a = [1,2,3,4,5,6,7,8,4,5]; // Etc. Random numbers after.

我想过滤它以仅包含那些与模式匹配的内容(假设这个简单示例大于 3),直到第一次追加某些内容(假设元素大于 7)

对于这个例子,我只想要:[4,5,6,7]。但使用 filter 时,我会得到尾随的 45:

const a = [1,2,3,4,5,6,7,8,4,5].filter((v) => v > 3)
// returns: [4, 5, 6, 7, 8, 4, 5]

所以我想从数组中获取项目并在满足条件后明确停止。如何在第一次不满足条件后进行过滤并停止? (没有 for 循环,我想保持它“类似功能”)

const a = [1,2,3,4,5,6,7,8,4,5,1,2,976,-1].awsome_function();
// returns: [4, 5, 6, 7, 8] because it stopped after the first 8.

最佳答案

您可以使用Array#some并将这两个条件结合起来。

var array = [1, 2, 3, 4, 5, 6, 7, 8, 4, 5],
    result = [];

array.some(a => (a > 3 && result.push(a), a > 7));
console.log(...result);

ES5

var array = [1, 2, 3, 4, 5, 6, 7, 8, 4, 5],
    result = [];

array.some(function (a) {
    if (a > 3) {
        result.push(a);
    }
    return a > 7;
});
console.log(...result);

一种函数式方法,具有过滤器和两个约束作为函数以及 bool 值的闭包。

var array = [1, 2, 3, 4, 5, 6, 7, 8, 4, 5],
    filterFn = v => v > 3,
    stopFn = v => v > 7,
    filterBy = (fFn, sFn, go = true) => v => go && fFn(v) && (go = !sFn(v)),
    result = array.filter(filterBy(filterFn, stopFn));

console.log(...result);

关于javascript - 过滤直到第一次满足某些条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42628499/

相关文章:

javascript - 我需要读取一个用 TypeScript(An Angular 模块)编写的文件,并以编程方式将代码添加到原始文件中。关于我该怎么做的任何想法?

javascript - 更改标签以匹配 ID 中的数字部分

javascript - 有没有办法在数字的千位数字上添加逗号?

javascript - 将子元素悬停在原型(prototype)中时失去对父元素的焦点

javascript - 如何将 jquery 代码转换为 javascript

javascript - 未捕获的类型错误 : Cannot set property 'value' of null

javascript - 使用 jQuery 和 Bootstrap 添加列表项

javascript - 检查链接是否重定向

javascript - 自定义 Shiny 输入更新 react

javascript - 滑动整个 jQuery slider 范围