Преобразование строки из поля ввода в отдельные массивы в зависимости от того, разделяются ли символы запятыми или пробелами

#javascript #arrays #angular #typescript #filter

#javascript #массивы #angular #typescript #Фильтр

Вопрос:

У меня есть поле ввода формы, из которого мне нужно получить строковое значение и сгруппировать входные данные в отдельные массивы в зависимости от погоды, когда слова заканчиваются запятой или пробелом.

Я попытался взять входную строку, затем разделить строку, используя запятую в качестве разделителя, затем поместить ее в массив запятых, затем отфильтровать этот массив, чтобы получить значения, разделенные пробелами, и поместить их в массив пробелов. У меня не было особого успеха. Мне также нужно сгруппировать последнее слово в поле ввода с помощью массива пробелов, поэтому, по сути, если оно не заканчивается запятой, слово группируется с помощью spaceSeparatedArray .

Я добавил код и воссоздал его в stackblitz — ссылка ниже.

https://stackblitz.com/edit/primeng-chips-demo-ss6jy4?file=src/app/app.component.html

Входная строка:
«a, b, cd ef gh, ijkl, mnop»

Желаемые выходные массивы:
commaSeparatedArray = [«a», «b», «gh», «ijkl»]

spaceSeparatedArray = [«cd», «ef», «mnop»]

HTML

 <form
[formGroup]="aForm"
(ngSubmit)="onSubmit()">

Value: {{ aForm.value | json }}

  <label>Comma Separator</label>
  
  <input
  formControlName="inputString"
  >
  <button type="submit">Submit</button>
</form>
  

TypeScript

 import { Component } from '@angular/core';
import {FormBuilder, FormControl, FormGroup} from '@angular/forms'
@Component({
  selector: 'app-root',
  templateUrl: './app.component.html'
})
export class AppComponent {

    valuesArray: [];
    
    
  aForm: FormGroup;

  constructor(
    private _formBuilder: FormBuilder
  ){
    this.aForm = this._formBuilder.group({
      inputString: new FormControl()
    })

  }
  // INPUT: 
  // a, b, cd ef gh, ijkl mnop

    onSubmit() {   
      let stringIn = this.aForm.get('inputString').value;
      let commaSeparatedArray = [];
      let spaceSeparatedArray = [];

      stringIn = stringIn.split(',');
      for(let i = 0; i <= stringIn.length; i  ) {
        commaSeparatedArray.push(stringIn[i]);
      }
           

      spaceSeparatedArray = commaSeparatedArray.filter(a=> a.includes(' '));

      // OUTPUT 

      console.log("SpaceSeparatedArray:  "  spaceSeparatedArray)

      console.log("CommaSeparatedArray:  "   commaSeparatedArray);
  

    }
}
  

Спасибо

Ответ №1:

Это должно сработать:

 const str = "a, b, cd ef gh, ijkl, mnop"

const commaSeparatedArray = str.split(' ')
.filter(s => s.slice(-1) === ',').map(s => s.replace(',', ''));

console.log(commaSeparatedArray);

const spaceSeparatedArray = str.split(' ')
.filter(s => s.slice(-1) !== ',');

console.log(spaceSeparatedArray);