Разбивает строку в соответствии с указанной длиной в массив - PullRequest
2 голосов
/ 12 апреля 2019

Разбивает строку в соответствии с указанной длиной в массив.

Существует ли простой способ сделать это с помощью массива в JavaScript?

Я написал следующую функцию, чтобы сделать это, но есть что-то короче или лучше?

function splitIntoArr(str, num) {
  let arr = [];
  let len = Math.ceil(str.length / num);

  for (let i = 0; i < len; i++) {
     arr.push(+str.substring(i * num, i * num + num))
  }

  return arr;
}

splitIntoArr("123456789", 2)  # Outputs: [12, 34, 56, 78, 9]
splitIntoArr("123456789", 3)  # Outputs: [123, 456 ,789]
splitIntoArr("123456789", 4)  # Outputs: [1234, 5678 ,9]

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

Вы можете использовать регулярные выражения и match()

function splitIntoArr(str,num){
  let reg = new RegExp(`.{1,${num}}`,"g");
  return str.match(reg);
}

console.log(splitIntoArr("123456789", 2))  // Outputs: [12, 34, 56, 78, 9]
console.log(splitIntoArr("123456789", 3))  //Outputs: [123, 456 ,789]
console.log(splitIntoArr("123456789", 4))  //Outputs: [1234, 5678 ,9]

Вы также можете сделать это, используя reduce()

function splitIntoArr(str,num){
  return [...Array(Math.ceil(str.length/num))].reduce((ac,a,i) => [...ac,str.slice(i*num,(i+1)*num)],[])
}

console.log(splitIntoArr("123456789", 2))  // Outputs: [12, 34, 56, 78, 9]
console.log(splitIntoArr("123456789", 3))  //Outputs: [123, 456 ,789]
console.log(splitIntoArr("123456789", 4))  //Outputs: [1234, 5678 ,9]
1 голос
/ 12 апреля 2019

Вы можете использовать регулярное выражение и match до нужного количества символов:

const splitIntoArr = (str, num) => str.match(new RegExp(`.{1,${num}}`, 'g'));

console.log(splitIntoArr("123456789", 2));
console.log(splitIntoArr("123456789", 3));
console.log(splitIntoArr("123456789", 4));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...