javascript - 每次遇到一个元素时将数组拆分为多个数组的最佳方法是什么?

标签 javascript arrays

我对 JS 还很陌生,还在学习中。我有这个数组:

[A,true,B,true,C,true,D,true,E,A,true,B,true,C,false,E,A,true,B,false,E]

每次出现 E 时将所述数组拆分为多个数组的最佳方法是什么?

即。上面的数组变为:

[A,true,B,true,C,true,D,true,E]
[A,true,B,true,C,false,E]
[A,true,B,false,E]

我尝试过的:

我试过将数组转换为字符串并拆分,但结果并不令人满意。

var pathsString = paths.toString();
pathsString = pathsString.split("," + end).filter(function(el) {return el.length != 0});
//end is E in this case

谢谢

最佳答案

您可以使用 Array.reduce()Array.filter() :

const arr = ['A',true,'B',true,'C',true,'D',true,'E','A',true,'B',true,'C',false,'E','A',true,'B',false,'E'];

const result = arr.reduce((acc, x) => {
  acc[acc.length-1].push(x)
  if (x === 'E') acc.push([]);
  return acc;
}, [[]]).filter(x => x.length);

console.log(result);

这里有一些解释:

  • Array.reduce() 遍历数组并将累加器从一个迭代传递到下一个迭代。此累加器 (acc) 在开始时被初始化为 [[]](一个包含空组的数组)。

  • 在每次迭代中,我们获取 acc 中的最后一组并将值 x 附加到该组。

  • 如果值等于 E,我们还会为下一次迭代推送一个新的空组。

  • 然后,如果 E 是最后一个字母或者输入数组为空,我们会过滤掉遗漏的空组。

关于javascript - 每次遇到一个元素时将数组拆分为多个数组的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55054123/

相关文章:

javascript - jquery各函数语法更新

javascript - axios.get() 请求返回未定义

javascript - Div 元素不会占用整个空间

javascript - parseInt 值没有错误

python - 找出总和最接近给定数 N 的三个整数

javascript - 将 Bootstrap 与 Webpack 结合使用

c - 关于 char 数组和指向它们的指针,我错过了哪些语法

python - 多个大型数组的内存问题

javascript - Array.map + parseInt

arrays - 如何从字符串中随机选择一定数量的项目,以空格分隔?