我对 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/