我如何按元素块化数组?
例如lodash有这个函数按长度分块数组
_.chunk(['a', 'b', 'c', 'd'], 2);
// => [['a', 'b'], ['c', 'd']]
_.chunk(['a', 'b', 'c', 'd'], 3);
// => [['a', 'b', 'c'], ['d']]
所以我有一个这样的数组['a','b','*','c']我可以做类似的事情
chunk(['a', 'b', '*', 'c'], '*')
会给我
[['a', 'b'], ['c']]
类似于字符串拆分
答案 0 :(得分:5)
您可以使用array.Reduce:
var arr = ['a', 'b', '*', 'c'];
var c = '*';
function chunk(arr, c) {
return arr.reduce((m, o) => {
if (o === c) {
m.push([]);
} else {
m[m.length - 1].push(o);
}
return m;
}, [[]]);
}
console.log(chunk(arr, c));

答案 1 :(得分:1)
使用传统的for循环:
function chunk(inputArray, el){
let result = [];
let intermediateArr = [];
for(let i=0; i<inputArray.length; i++){
if(inputArray[i] == el)
{
result.push(intermediateArr);
intermediateArr=[];
}else {
intermediateArr.push(inputArray[i]);
}
}
if(intermediateArr.length>0) {
result.push(intermediateArr);
}
return result;
}
console.log(
chunk(['a', 'b', '*', 'c', 'd', 'e', '*', 'f'], '*')
)
答案 2 :(得分:0)
一点点递归。
function chunk (arr, el) {
const index = arr.indexOf(el);
var firstPart;
var secondPart;
if(index > -1) {
firstPart = arr.slice(0, index);
secondPart = arr.slice(index + 1);
}
if(secondPart.indexOf(el) > -1) {
return [firstPart].concat(chunk(secondPart, el));
}
return [firstPart, secondPart];
}
console.log(
chunk(['a', 'b', '*', 'c', 'd', 'e', '*', 'f'], '*')
)
&#13;