невозможно выполнить цикл для объекта в Angular

#javascript #angular

#javascript #angular

Вопрос:

У меня есть данные, подобные приведенным ниже

 data = ["I253,J665,l2575"]
  

и мне нужны результаты, подобные

 I253,
J665,
l2575
  

когда я попытался использовать for в, я получаю like I253,J665,l2575 , и я также пробовал циклы for, но не получил результата

 let data = ["I253,J665,l2575"]
for (let i = 0; i > this.data.length; i  ) {
  console.log(i)
}

for (let x of this.data) {
  console.log(x)
}  

попытался преобразовать данные в строку, а затем с помощью split изменить в array, но тогда я также получаю только typeof object

ниже приведен мой URL-адрес stack blitz =:https://stackblitz.com/edit/angular-ivy-drf1dk?file=src/app/app.component.ts

Ответ №1:

Измените свою data переменную, как показано ниже:

 data = ["I253", "J665", "l2575"];

for(let i = 0; i < this.data.length; i  ){
  console.log(this.data[i]);
}
  

Если у вас есть data переменная в виде data = ["I253,J665,l2575"];

Тогда сначала разделите его, а затем выполните цикл по сгенерированному массиву:

 const arr = data[0].split(',');
for(let i = 0; i < arr.length; i  ){
  console.log(arr[i]   ',');
}
  

Комментарии:

1. я попытался преобразовать его в строку, а оттуда в массив, используя .split(«,’), который также не работает

2. попытался преобразовать данные в строку, а затем с помощью split изменить в array, но тогда я также получаю только typeof object

Ответ №2:

У вас было несколько ошибок. Первый был с for условием, которого должно быть i < this.data.length нет i > this.data.length . Затем вам нужно разделить и выполнить цикл над ним с помощью for (let j = 0; j < data[i].split(',').length; j ) so data[i].split(',')[j] , чтобы вернуть ожидаемое значение.

В случае 2nd for...of цикла вы просто записывали целое значение. Здесь также вам нужно выполнить разделение внутри for...of и использовать еще один цикл для регистрации.

В качестве альтернативы вы также можете использовать flatMap и зациклить его следующим образом for (let m of data.flatMap(x => x.split(','))) .

Попробуйте это ниже. Вы можете использовать this.data , но в приведенном ниже примере это не сработает, поэтому используется просто data .

 let data = ["I253,J665,l2575"];

console.log("Using for loop");
for (let i = 0; i < data.length; i  ) {
  for (let j = 0; j < data[i].split(',').length; j  ) {
    console.log(data[i].split(',')[j]);
  }
}

console.log("Using for...of loop");
for (let x of data) {
  for (let y of x.split(',')) {
    console.log(y);
  }
}

console.log("Using flatMap");
for (let m of data.flatMap(x => x.split(','))) {
  console.log(m);
}  

Комментарии:

1. Хорошо, но этот метод разделения сломается, если у меня будет одно правильное значение, скажем, например, [«I253»] — это единственное значение, которое у меня есть

2. Нет, он не сломается. Попробуйте. "I253".split(',') вернет ["I253"] .

Ответ №3:

Есть два способа решить эту проблему. Также обратите внимание, что ваш цикл неправильный, НЕ ДОЛЖНО БЫТЬ ‘>’, а должно быть ‘<‘

1. Ваши данные имеют нулевой индекс массива, поэтому, если вы хотите сохранить данные как есть

 let data = ["I253,J665,l2575"]
let splits = data[0].split(',')
for (let i = 0; i < splits.length; i  ) {
  console.log(splits[i])
}
  

или

 let data = ["I253,J665,l2575"]
let splits = data[0].split(',')
for (let element of splits) {
  console.log(element )
}
  

2. Исправьте строку данных

 let dataString = "I253,J665,l2575"
let splits = dataString.split(',')
for (let i = 0; i < splits.length; i  ) {
  console.log(splits[i])
}
  

или

 let dataString = "I253,J665,l2575"
let splits = dataString.split(',')
for (let element of splits) {
  console.log(i)
}
  

Клонирование примера, приведенного в вопросе

https://stackblitz.com/edit/angular-ivy-izj7up

Комментарии:

1. Хорошо, но этот метод разделения сломается, если у меня будет одно правильное значение, скажем, например, [«I253»] — это единственное значение, которое у меня есть

2. Ну , это не так stackblitz.com/edit/angular-ivy-4xf1qh