#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);