我有一个像这样的数组:
[ 3, 8, 18, '-', 19, 3, 8, 20, 19, 3, 8, '-', 22 ]
我想根据'-'的位置将其分成子数组,所以看起来像这样:
[ [3, 8, 18], [19, 3, 8, 20, 19, 3, 8], [22] ]
我需要编写一个函数来对其他类似的数组执行此操作。
我尝试使用slice方法,但是我不太清楚如何使它工作。任何想法将不胜感激。
答案 0 :(得分:2)
您可以遍历数组并用内容填充临时数组,当您找到特殊的拆分字符时,可以将临时数组推入结果数组,清空临时数组,然后继续循环
let data = [ 3, 8, 18, '-', 19, 3, 8, 20, 19, 3, 8, '-', 22 ];
let result = [];
let temp = [];
for (let item of data) {
if (item == '-') {
result.push(temp);
temp = [];
} else {
temp.push(item);
}
}
result.push(temp);
console.log(result);
答案 1 :(得分:0)
我相信这是您正在寻找的答案:
l = [ 3, 8, 18, '-', 19, 3, 8, 20, 19, 3, 8, '-', 22 ];
let res = [];
let subres = [];
l.forEach((n, index) => {
if (n !== '-') {
subres.push(n);
} else {
res.push(subres);
subres = [];
}
if (index === l.length - 1 && subres.length >= 1) {
res.push(subres);
}
})
console.log(res);
答案 2 :(得分:0)
您可以使用reduce
:
const arr = [3, 8, 18, '-', 19, 3, 8, 20, 19, 3, 8, '-', 22];
const res = arr.reduce((acc, curr) => {
curr == "-" ? acc.push([]) : acc[acc.length - 1].push(curr);
return acc;
}, [[]]);
console.log(res);
.as-console-wrapper { max-height: 100% !important; top: auto; }
答案 3 :(得分:0)
您可以为您执行此操作,并且可以在内部使用Array.reduce或Array.forEach根据传入字符的位置遍历每个元素和“分组”。 / p>
var data = [ 3, 8, 18, '-', 19, 3, 8, 20, 19, 3, 8, '-', 22 ]
let chunkByChar = (arr, char) => {
let result = [[]]
arr.forEach(x => x === char ? result.push([]) : result[result.length-1].push(x))
return result
}
console.log(chunkByChar(data, '-'))
console.log(chunkByChar(data, 8))
console.log(chunkByChar(data, 3))