使用特定字符作为断点,将数组分成较小的数组

时间:2019-05-21 00:21:33

标签: javascript arrays

我有一个像这样的数组:

  [ 3, 8, 18, '-', 19, 3, 8, 20, 19, 3, 8, '-', 22 ]

我想根据'-'的位置将其分成子数组,所以看起来像这样:

  [ [3, 8, 18], [19, 3, 8, 20, 19, 3, 8], [22] ]

我需要编写一个函数来对其他类似的数组执行此操作。

我尝试使用slice方法,但是我不太清楚如何使它工作。任何想法将不胜感激。

4 个答案:

答案 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.reduceArray.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))