连续出现元素后获取JavaScript数组元素

Chi*_*hoo 8 javascript arrays

我有一个JavaScript数组,如:

var myArray = ['a', 'x', 'b', 'x', 'x', 'p', 'y', 'x', 'x', 'b', 'x', 'x'];
Run Code Online (Sandbox Code Playgroud)

我想只获取在特定元素发生2次之后出现的数组元素.

即在上面的数组中,我想获取随后出现的所有元素 'x', 'x'

所以我的输出应该是:

'p'
'b'
Run Code Online (Sandbox Code Playgroud)

我有一个解决方案,如:

var arrLength = myArray.length;
for (var i = 0; i < arrLength; i++) {
    if(i+2 < arrLength && myArray[i] == 'x' && myArray[i+1] == 'x') {
        console.log(myArray[i+2]);
    }
};
Run Code Online (Sandbox Code Playgroud)

这满足了我的需求,但并不是那么通用.

例如.如果我要检查3次随之出现,然后再次我要补充内部条件,如果myArray[i+2] == 'x'等.

任何人都可以提供更好的方法来获取元素吗?

Sim*_*n H 5

功能方式是使用递归.通过ES6传播,您几乎可以模仿真正"功能"语言的简洁性:-)

var myArray = ['a', 'x', 'b', 'x', 'x', 'p', 'y', 'x', 'x', 'b', 'x', 'x'];

function reducer(acc, xs) {
    if (xs.length > 2) {
        if (xs[0] === xs[1]) {
            // add the third element to accumulator
            // remove first three elements from xs
            // return reducer([xs[2], ...acc], xs.slice(3));
            // or per Nina's question below
            return reducer([xs[2], ...acc], xs.slice(1));
        } else {
            // remove first element from xs and recurse
            return reducer(acc, xs.slice(1))
        }
    } else {
        return acc;
    }
}

console.log(reducer([], myArray));
Run Code Online (Sandbox Code Playgroud)