Pu sh int в массив строк - PullRequest
       4

Pu sh int в массив строк

0 голосов
/ 09 января 2020

Я использую автозаполнение и хочу сохранить идентификаторы выбранных пользователей.

Я хочу сохранить идентификаторы в массиве строк, и этот массив должен иметь только уникальные значения (не может иметь повторяющиеся значения)

Я пытался сделать pu sh и преобразовать значения (используя tostring ()), но безрезультатно.

Может кто-нибудь помочь мне?

Требуемый вывод (пример): ["1", "2", "3", "4"]

Мой код DEMO

КОМПОНЕНТ

 ngOnInit() {
    this.userService.getUsers().subscribe(
      (val: any[]) =>{
        this.allFruits = val.map(user => {
      this.nameIdMap.set(user.username, user.id);
      return user.username
    });
        this.fruitCtrl.setValue(null); //use this to apply changes instantly
      } 
    )
  }

  remove(fruit: string): void {
    const index = this.fruits.indexOf(fruit);

    if (index >= 0) {
      this.fruits.splice(index, 1);
    }
  }

arr:any;
selected(event: MatAutocompleteSelectedEvent): void {
  var a = this.nameIdMap.get(event.option.viewValue);
  console.log(a);
  // var b = this.arr.push(a);
  // var c = b.map((input) => input).join(",").toString();
  // console.log(c)
  this.fruits.push(event.option.viewValue);
  this.fruitInput.nativeElement.value = '';
  this.fruitCtrl.setValue(null);
}

Ответы [ 3 ]

2 голосов
/ 09 января 2020

Ваш массив объявлен, но никогда не инициализирован. Сначала вам нужно его инициализировать. И поскольку вы хотите, чтобы это был строковый массив, вы должны объявить его следующим образом:

arr:string[] = [];

Затем вам нужно преобразовать ваши числа в строки, если вы хотите записать их sh в этот массив. Метод push не возвращает массив, поэтому вы должны продолжать ссылаться на само поле, а не захватывать результат так, как вы пытаетесь это сделать.

  this.arr.push(a.toString());
  var c = this.arr.map((input) => input).join(",").toString();
  console.log(c)
2 голосов
/ 10 января 2020

будет выглядеть следующим образом.

selected(event: MatAutocompleteSelectedEvent): void {
  var a = this.nameIdMap.get(event.option.viewValue);
  //this makes sure selected id does not exist
  if( this.arr.filter(x => /*makes cast int to string to compare items*/ String(a) == x).length < 1) {
      this.arr.push(String(a));
      this.fruits.push(event.option.viewValue);
  }
  console.log(a, this.arr);

  this.fruitInput.nativeElement.value = '';
  this.fruitCtrl.setValue(null);
}

убедитесь, что переменная arr инициализирована с момента ее объявления.

arr:any[] = [];

надеюсь, что это будет полезно. D;

0 голосов
/ 09 января 2020

let a = new Set();
a.add(String(1));
console.log(Array.from(a)); // ["1"]
...