我有一个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'等.
任何人都可以提供更好的方法来获取元素吗?
功能方式是使用递归.通过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)
| 归档时间: |
|
| 查看次数: |
1152 次 |
| 最近记录: |